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发送Email方法实例
Aug 21 Python
Python字符串转换成浮点数函数分享
Jul 24 Python
Python读取英文文件并记录每个单词出现次数后降序输出示例
Jun 28 Python
selenium+python自动化测试之鼠标和键盘事件
Jan 23 Python
Python3调用百度AI识别图片中的文字功能示例【测试可用】
Mar 13 Python
使用 Python 处理 JSON 格式的数据
Jul 22 Python
如何实现Django Rest framework版本控制
Jul 25 Python
python按行读取文件并找出其中指定字符串
Aug 08 Python
ipad上运行python的方法步骤
Oct 12 Python
Pytorch之卷积层的使用详解
Dec 31 Python
python中adb有什么功能
Jun 07 Python
python微信智能AI机器人实现多种支付方式
Apr 12 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开源建站平台小结
2010/04/22 PHP
深入探讨:Nginx 502 Bad Gateway错误的解决方法
2013/06/03 PHP
php源码分析之DZX1.5字符串截断函数cutstr用法
2015/06/17 PHP
在CentOS系统上从零开始搭建WordPress博客的全流程记录
2016/04/21 PHP
PHP 等比例缩放图片详解及实例代码
2016/09/18 PHP
利用PHPStorm如何开发Laravel应用详解
2017/08/30 PHP
laravel orm 关联条件查询代码
2019/10/21 PHP
修改发贴的编辑功能
2007/03/07 Javascript
JS 中document.URL 和 windows.location.href 的区别
2009/11/11 Javascript
再谈querySelector和querySelectorAll的区别与联系
2012/04/20 Javascript
javascript操作符&quot;!~&quot;详解
2015/02/10 Javascript
jquery实现动画菜单的左右滚动、渐变及图形背景滚动等效果
2015/08/25 Javascript
快速掌握Node.js环境的安装与运行方法
2016/02/16 Javascript
etmvc+jQuery EasyUI+combobox多值操作实现角色授权实例
2016/11/09 Javascript
vue使用Axios做ajax请求详解
2017/06/07 Javascript
使用vue制作探探滑动堆叠组件的实例代码
2018/03/07 Javascript
JavaScript代码实现txt文件的上传预览功能
2018/03/27 Javascript
基于vue2.0实现仿百度前端分页效果附实现代码
2018/10/30 Javascript
JavaScript基础之静态方法和实例方法分析
2018/12/26 Javascript
原生js实现可兼容PC和移动端的拖动滑块功能详解【测试可用】
2019/08/15 Javascript
layui的数据表格+springmvc实现搜索功能的例子
2019/09/28 Javascript
Python中index()和seek()的用法(详解)
2017/04/27 Python
python实现快速排序的示例(二分法思想)
2018/03/12 Python
Python数据结构之哈夫曼树定义与使用方法示例
2018/04/22 Python
基于python-opencv3的图像显示和保存操作
2019/06/27 Python
python numpy存取文件的方式
2020/04/01 Python
浅谈Tensorflow加载Vgg预训练模型的几个注意事项
2020/05/26 Python
python pymysql库的常用操作
2020/10/16 Python
多视角3D可旋转的HTML5 Logo动画
2016/03/02 HTML / CSS
英国花园家具中心:Garden Furniture Centre
2017/08/24 全球购物
澳大利亚领先的女性运动服品牌:Lorna Jane
2020/06/19 全球购物
北体毕业生求职信
2014/02/28 职场文书
企业承诺书怎么写
2014/05/24 职场文书
学历证明样本
2015/06/16 职场文书
单位同意报考证明
2015/06/17 职场文书
2019年最新七夕唯美祝福语(60条)
2019/07/22 职场文书