python3实现全角和半角字符转换的方法示例


Posted in Python onSeptember 21, 2017

前言

本文主要给大家介绍了关于python3中全角和半角字符转换的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。

一、背景介绍

解决什么问题:快速方便的对文本进行全角半角自动转换

适用什么场景:学生答题数据中全角字符替换为半角字符

二、全角半角原理

全角即:Double Byte Character,简称DBC

半角即:Single Byte Character,简称SBC

在 windows 中,中文和全角字符都占两个字节,并且使用了 ascii chart 2 (codes 128?255);
全角字符的第一个字节总是被置为 163,而第二个字节则是相同半角字符码加上128(不包括空格,全角空格和半角空格也要考虑进去);

对于中文来说,它的第一个字节被置为大于163,如'阿'为:176 162,检测到中文时不进行转换。

例如:半角 a 为 65,则全角 a 是 163(第一个字节)、193(第二个字节,128+65)。

全角半角示例:(文本 test.txt 包含全角和半角字符)

F:\test>type test.txt
123456
123456
abcdefg
abcdefg
中国你好

三、使用 Python3 实现全角半角转换

# -*- coding:utf-8 -*-
# i@mail.chenpeng.info

”'
全角即:Double Byte Character,简称:DBC
半角即:Single Byte Character,简称:SBC
”'

def DBC2SBC(ustring):
 ”' 全角转半角 ”'
 rstring = “”
 for uchar in ustring:
  inside_code = ord(uchar)
  if inside_code == 0x3000:
  inside_code = 0x0020
  else:
  inside_code -= 0xfee0
  if not (0x0021 <= inside_code and inside_code <= 0x7e):
   rstring += uchar
   continue
  rstring += chr(inside_code)
 return rstring

def SBC2DBC(ustring):
 ”' 半角转全角 ”'
 rstring = “”
 for uchar in ustring:
  inside_code = ord(uchar)
  if inside_code == 0x0020:
  inside_code = 0x3000
  else:
  if not (0x0021 <= inside_code and inside_code <= 0x7e):
   rstring += uchar
   continue
  inside_code += 0xfee0
  rstring += chr(inside_code)
 return rstring

s = ”'
array(‘0' => ‘0', ‘1' => ‘1', ‘2' => ‘2', ‘3' => ‘3', ‘4' => ‘4',
  ‘5' => ‘5', ‘6' => ‘6', ‘7' => ‘7', ‘8' => ‘8', ‘9' => ‘9',
  ‘A' => ‘A', ‘B' => ‘B', ‘C' => ‘C', ‘D' => ‘D', ‘E' => ‘E',
  ‘F' => ‘F', ‘G' => ‘G', ‘H' => ‘H', ‘I' => ‘I', ‘J' => ‘J',
  ‘K' => ‘K', ‘L' => ‘L', ‘M' => ‘M', ‘N' => ‘N', ‘O' => ‘O',
  ‘P' => ‘P', ‘Q' => ‘Q', ‘R' => ‘R', ‘S' => ‘S', ‘T' => ‘T',
  ‘U' => ‘U', ‘V' => ‘V', ‘W' => ‘W', ‘X' => ‘X', ‘Y' => ‘Y',
  ‘Z' => ‘Z', ‘a' => ‘a', ‘b' => ‘b', ‘c' => ‘c', ‘d' => ‘d',
  ‘e' => ‘e', ‘f' => ‘f', ‘g' => ‘g', ‘h' => ‘h', ‘i' => ‘i',
  ‘j' => ‘j', ‘k' => ‘k', ‘l' => ‘l', ‘m' => ‘m', ‘n' => ‘n',
  ‘o' => ‘o', ‘p' => ‘p', ‘q' => ‘q', ‘r' => ‘r', ‘s' => ‘s',
  ‘t' => ‘t', ‘u' => ‘u', ‘v' => ‘v', ‘w' => ‘w', ‘x' => ‘x',
  ‘y' => ‘y', ‘z' => ‘z',
  ‘(' => ‘(‘, ‘)' => ‘)', ‘〔' => ‘[‘, ‘〕' => ‘]', ‘【' => ‘[‘,
  ‘】' => ‘]', ‘〖' => ‘[‘, ‘〗' => ‘]', ‘”‘ => ‘[‘, ‘”‘ => ‘]',
  ‘\” => ‘[‘, ‘\” => ‘]', ‘{' => ‘{‘, ‘}' => ‘}', ‘《' => ‘<‘,
  ‘》' => ‘>',
  ‘%' => ‘%', ‘+' => ‘+', ‘—' => ‘-‘, ‘-' => ‘-‘, ‘~' => ‘-‘,
  ‘:' => ‘:', ‘。' => ‘.', ‘、' => ‘,', ‘,' => ‘.', ‘、' => ‘.',
  ‘;' => ‘,', ‘?' => ‘?', ‘!' => ‘!', ‘…' => ‘-‘, ‘‖' => ‘|',
  ‘”‘ => ‘”‘, ‘\” => ‘`', ‘\” => ‘`', ‘|' => ‘|', ‘〃' => ‘”‘,
  ‘ ' => ‘ ‘);
  ”'

# 全角转半角
print(DBC2SBC(s))

# 半角转全角
print(SBC2DBC(s))

s = ”'中文测试”'

# 全角转半角
print(DBC2SBC(s))

# 半角转全角
print(SBC2DBC(s))

四、总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

五、参考资料

http://thinkerou.com/2015-06/covert-dbc-sbc/

Python 相关文章推荐
Python获取电脑硬件信息及状态的实现方法
Aug 29 Python
详解python的几种标准输出重定向方式
Aug 15 Python
使用Python读取大文件的方法
Feb 11 Python
Python高级用法总结
May 26 Python
Python简单读写Xls格式文档的方法示例
Aug 17 Python
Python socket实现的简单通信功能示例
Aug 21 Python
对Python 窗体(tkinter)文本编辑器(Text)详解
Oct 11 Python
详解pyppeteer(python版puppeteer)基本使用
Jun 12 Python
python pyqtgraph 保存图片到本地的实例
Mar 14 Python
PyTorch: Softmax多分类实战操作
Jul 07 Python
最新Python idle下载、安装与使用教程图文详解
Nov 28 Python
Python 如何安装Selenium
May 06 Python
python实现二分查找算法
Sep 21 #Python
分享给Python新手们的几道简单练习题
Sep 21 #Python
python验证码识别的示例代码
Sep 21 #Python
Python优先队列实现方法示例
Sep 21 #Python
python虚拟环境virtualenv的安装与使用
Sep 21 #Python
基于python socketserver框架全面解析
Sep 21 #Python
基于python select.select模块通信的实例讲解
Sep 21 #Python
You might like
PHP中VC6、VC9、TS、NTS版本的区别与用法详解
2013/10/26 PHP
PHP中使用xmlreader读取xml数据示例
2014/12/29 PHP
laravel框架模型和数据库基础操作实例详解
2020/01/25 PHP
js 页面执行时间计算代码
2009/03/04 Javascript
Firefox中autocomplete=&quot;off&quot; 设置不起作用Bug的解决方法
2011/03/25 Javascript
jQuery LigerUI 使用教程表格篇(1)
2012/01/18 Javascript
jquery怎样实现ajax联动框(二)
2013/03/08 Javascript
js给页面加style无效果的解决方法
2014/01/20 Javascript
javascript修改IMG标签的src问题
2014/03/28 Javascript
实现图片预加载的三大方法及优缺点分析
2014/11/19 Javascript
超实用的JavaScript表单代码段
2016/02/26 Javascript
基于jQuery实现表格的查看修改删除
2016/08/01 Javascript
浅析BootStrap中Modal(模态框)使用心得
2016/12/24 Javascript
jQuery NProgress.js加载进度插件的简单使用方法
2018/01/31 jQuery
vue-cli开发时,关于ajax跨域的解决方法(推荐)
2018/02/03 Javascript
React native ListView 增加顶部下拉刷新和底下点击刷新示例
2018/04/27 Javascript
VUE基于NUXT的SSR 服务端渲染
2018/11/30 Javascript
layer更改皮肤的实现方法
2019/09/11 Javascript
解决vue单页面应用进入页面加载所有 js 的问题
2020/08/12 Javascript
javascript实现滚轮轮播图片
2020/12/13 Javascript
Django中模版的子目录与include标签的使用方法
2015/07/16 Python
Python爬虫实现网页信息抓取功能示例【URL与正则模块】
2017/05/18 Python
python3+PyQt5重新实现QT事件处理程序
2018/04/19 Python
python调用c++ ctype list传数组或者返回数组的方法
2019/02/13 Python
关于Python 的简单栅格图像边界提取方法
2019/07/05 Python
基于pandas中expand的作用详解
2019/12/17 Python
一个入门级python爬虫教程详解
2021/01/27 Python
html5中canvas学习笔记1-画板的尺寸与实际显示尺寸
2013/01/06 HTML / CSS
DJI大疆无人机官方商城:全球领先的无人飞行器研发和生产商
2016/12/21 全球购物
WatchShop法国:英国排名第一的独立手表零售商
2020/02/17 全球购物
高级方案规划工程师岗位职责
2013/11/29 职场文书
《三峡》教学反思
2014/03/01 职场文书
初级党校心得体会
2014/09/11 职场文书
无房产证房屋转让协议书合同样本
2014/10/18 职场文书
个人务虚会发言材料
2014/10/20 职场文书
2014年小学体育工作总结
2014/12/11 职场文书