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的Django框架可适配的各种数据库介绍
Jul 15 Python
Python爬虫框架Scrapy实战之批量抓取招聘信息
Aug 07 Python
分析python切片原理和方法
Dec 19 Python
pip matplotlib报错equired packages can not be built解决
Jan 06 Python
Python列表推导式、字典推导式与集合推导式用法实例分析
Feb 07 Python
Python 实现异步调用函数的示例讲解
Oct 14 Python
Python绘制并保存指定大小图像的方法
Jan 10 Python
Python3.5 + sklearn利用SVM自动识别字母验证码方法示例
May 10 Python
python实时监控logstash日志代码
Apr 27 Python
Python代码执行时间测量模块timeit用法解析
Jul 01 Python
Pytorch之Tensor和Numpy之间的转换的实现方法
Sep 03 Python
Vs Code中8个好用的python 扩展插件
Oct 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 include加载文件两种方式效率比较
2010/08/08 PHP
10个实用的PHP代码片段
2011/09/02 PHP
五款PHP代码重构工具推荐
2014/10/14 PHP
PHP+iframe图片上传实现即时刷新效果
2016/11/18 PHP
PHP-FPM运行状态的实时查看及监控详解
2016/11/18 PHP
基于Jquery的仿照flash放大图片效果代码
2011/03/16 Javascript
Jquery实现三层遍历删除功能代码
2013/04/23 Javascript
JS控制一个DIV层在指定时间内消失的方法
2014/02/17 Javascript
浅析JavaScript基本类型与引用类型
2014/05/28 Javascript
JavaScript中操作字符串小结
2015/05/04 Javascript
Javascript函数的参数
2015/07/16 Javascript
JavaScript电子时钟倒计时
2016/01/09 Javascript
TypeOf这些知识点你了解吗
2016/02/21 Javascript
通过Tabs方法基于easyUI+bootstrap制作工作站
2016/03/28 Javascript
利用React-router+Webpack快速构建react程序
2016/10/27 Javascript
利用Plupload.js解决大文件上传问题, 带进度条和背景遮罩层
2017/03/15 Javascript
关于Vue背景图打包之后访问路径错误问题的解决
2017/11/03 Javascript
iview table高度动态设置方法
2018/03/14 Javascript
使用vue-router为每个路由配置各自的title
2018/07/30 Javascript
JavaScript基于遍历操作实现对象深拷贝功能示例
2019/03/05 Javascript
微信小程序通过js实现瀑布流布局详解
2019/08/28 Javascript
Layui 导航默认展开和菜单栏选中高亮设置的方法
2019/09/04 Javascript
jquery选择器和属性对象的操作实例分析
2020/01/10 jQuery
javascript用defineProperty实现简单的双向绑定方法
2020/04/03 Javascript
vue实现可移动的悬浮按钮
2021/03/04 Vue.js
浅谈Python中的闭包
2015/07/08 Python
Python基于identicon库创建类似Github上用的头像功能
2017/09/25 Python
通过python将大量文件按修改时间分类的方法
2018/10/17 Python
对pyqt5多线程正确的开启姿势详解
2019/06/14 Python
Python如何实现定时器功能
2020/05/28 Python
html5配合css3实现带提示文字的输入框(摆脱js)
2013/03/08 HTML / CSS
ellesse美国官方商店:意大利高级运动服品牌
2019/10/29 全球购物
自1926年以来就为冰岛保持温暖:66°North
2020/11/27 全球购物
个人查摆剖析材料
2014/02/04 职场文书
《窗前的气球》教学反思
2014/04/07 职场文书
财务部会计岗位职责
2015/02/03 职场文书