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与php实现分割文件代码
Mar 06 Python
详解使用 pyenv 管理多个版本 python 环境
Oct 19 Python
Python简单读取json文件功能示例
Nov 30 Python
Django中Model的使用方法教程
Mar 07 Python
python 自动批量打开网页的示例
Feb 21 Python
Python实现钉钉订阅消息功能
Jan 14 Python
Python爬虫工具requests-html使用解析
Apr 29 Python
Python Tornado实现WEB服务器Socket服务器共存并实现交互的方法
May 26 Python
matplotlib基础绘图命令之imshow的使用
Aug 13 Python
Python使用pickle进行序列化和反序列化的示例代码
Sep 22 Python
python 窃取摄像头照片的实现示例
Jan 08 Python
Python作用域和名称空间的详细介绍
Apr 13 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
PHP5 安装方法
2006/10/09 PHP
php+mysql分页代码详解
2008/03/27 PHP
php垃圾代码优化操作代码
2010/08/05 PHP
PHP图片自动裁切应付不同尺寸的显示
2014/10/16 PHP
yii2实现分页,带搜索的分页功能示例
2017/01/07 PHP
PHP正则表达式匹配替换与分割功能实例浅析
2017/02/04 PHP
Javascript 中文字符串处理额外注意事项
2009/11/15 Javascript
jquery validator 插件增加日期比较方法
2010/02/21 Javascript
JavaScript对象和字串之间的转换实例探讨
2013/04/21 Javascript
wap浏览自动跳转到wap页面的js代码
2014/05/17 Javascript
js css 实现遮罩层覆盖其他页面元素附图
2014/09/22 Javascript
JS实现5秒钟自动封锁div层的方法
2015/02/20 Javascript
跟我学习javascript的执行上下文
2015/11/18 Javascript
JavaScript核心语法总结(推荐)
2016/06/02 Javascript
js,jq,css多方面实现简易下拉菜单功能
2017/05/13 Javascript
Vue header组件开发详解
2018/01/26 Javascript
boostrap模态框二次弹出清空原有内容的方法
2018/08/10 Javascript
react在安卓中输入框被手机键盘遮挡问题的解决方法
2018/09/03 Javascript
vue 实现边输入边搜索功能的实例讲解
2018/09/16 Javascript
使用python搭建Django应用程序步骤及版本冲突问题解决
2013/11/19 Python
python通过yield实现数组全排列的方法
2015/03/18 Python
Python中的with语句与上下文管理器学习总结
2016/06/28 Python
Python2.7读取PDF文件的方法示例
2017/07/13 Python
全面了解Nginx, WSGI, Flask之间的关系
2018/01/09 Python
Python正则表达式匹配数字和小数的方法
2019/07/03 Python
python对接ihuyi实现短信验证码发送
2020/05/10 Python
关于Python3的import问题(pycharm可以运行命令行import错误)
2020/11/18 Python
关于css中margin的值和垂直外边距重叠问题
2020/10/27 HTML / CSS
韩国休闲女装品牌网站:ANAIS
2016/08/24 全球购物
Artist Guitars新西兰:乐器在线商店
2017/09/17 全球购物
Farfetch澳大利亚官网:Farfetch Australia
2020/04/26 全球购物
加工操作管理制度
2014/01/19 职场文书
2014植树节活动总结
2014/03/11 职场文书
2014校长四风问题对照检查材料思想汇报
2014/09/16 职场文书
辩论赛新闻稿
2015/07/17 职场文书
MySQL 角色(role)功能介绍
2021/04/24 MySQL