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网络编程学习笔记(二):socket建立网络客户端
Jun 09 Python
Python字符串中查找子串小技巧
Apr 10 Python
python实现文件快照加密保护的方法
Jun 30 Python
Python字符编码判断方法分析
Jul 01 Python
python中requests小技巧
May 10 Python
Python实现获取命令行输出结果的方法
Jun 10 Python
Python编写登陆接口的方法
Jul 10 Python
Tensorflow实现酸奶销量预测分析
Jul 19 Python
在pycharm中显示python画的图方法
Aug 31 Python
浅谈Python协程
Jun 17 Python
解决python 执行shell命令无法获取返回值的问题
Dec 05 Python
opencv-python图像配准(匹配和叠加)的实现
Jun 23 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+mysql保存和输出文件
2006/10/09 PHP
简单的方法让你的后台登录更加安全(php中加session验证)
2012/08/22 PHP
PHP批量删除jQuery操作
2017/07/23 PHP
thinkPHP框架中执行事务的方法示例
2018/05/31 PHP
PHP实现类似题库抽题效果
2018/08/16 PHP
JavaScript中常见陷阱小结
2010/04/27 Javascript
JavaScript对IE操作的经典代码(推荐)
2014/03/10 Javascript
JavaScript中的普通函数与构造函数比较
2015/04/07 Javascript
javascript事件委托的方式绑定详解
2015/06/10 Javascript
JQuery实现图片轮播效果
2015/09/15 Javascript
JavaScript如何禁止Backspace键
2015/12/02 Javascript
在Docker快速部署Node.js应用的详细步骤
2016/09/02 Javascript
js带闹铃功能的倒计时代码
2016/09/29 Javascript
JS实现类似百叶窗下拉菜单效果
2016/12/30 Javascript
JS实现将链接生成二维码并转为图片的方法
2018/03/17 Javascript
微信小程序实现保存图片到相册功能
2018/11/30 Javascript
微信小程序实现文字从右向左无限滚动
2020/11/18 Javascript
Vue动态创建注册component的实例代码
2019/06/14 Javascript
[04:49]期待西雅图之战 2016国际邀请赛中国区预选赛WINGS战队赛后采访
2016/06/29 DOTA
Python获取任意xml节点值的方法
2015/05/05 Python
python中黄金分割法实现方法
2015/05/06 Python
python爬虫正则表达式之处理换行符
2018/06/08 Python
python安装pywin32clipboard的操作方法
2019/01/24 Python
python 实现生成均匀分布的点
2019/12/05 Python
Django 自定义权限管理系统详解(通过中间件认证)
2020/03/11 Python
Python计算信息熵实例
2020/06/18 Python
Python实现像awk一样分割字符串
2020/09/15 Python
Jupyter Notebook 远程访问配置详解
2021/01/11 Python
pycharm 实现复制一行的快捷键
2021/01/15 Python
如何在Cookie里面保存Unicode和国际化字符
2013/05/25 面试题
搬家公司的创业计划书
2014/01/01 职场文书
企业口号大全
2014/06/12 职场文书
节能减耗标语
2014/06/21 职场文书
现实表现材料范文
2014/12/23 职场文书
英文慰问信
2015/02/14 职场文书
HTML速写之Emmet语法规则的实现
2021/04/07 HTML / CSS