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开发之快速搭建自动回复微信公众号功能
Apr 22 Python
使用Python的Scrapy框架十分钟爬取美女图
Dec 26 Python
Python自动化开发学习之三级菜单制作
Jul 14 Python
Python hashlib模块用法实例分析
Jun 12 Python
代码详解django中数据库设置
Jan 28 Python
对Python3 序列解包详解
Feb 16 Python
Python给图像添加噪声具体操作
Mar 03 Python
Python函数基础实例详解【函数嵌套,命名空间,函数对象,闭包函数等】
Mar 30 Python
详解Python学习之安装pandas
Apr 16 Python
python编程进阶之异常处理用法实例分析
Feb 21 Python
python图像处理基本操作总结(PIL库、Matplotlib及Numpy)
Jun 08 Python
Python实现PIL图像处理库绘制国际象棋棋盘
Jul 16 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 在5.1.* 和5.2.*之间 PDO数据库操作中的不同之处小结
2012/03/07 PHP
基于php伪静态的实现详细介绍
2013/04/28 PHP
php使用Header函数,PHP_AUTH_PW和PHP_AUTH_USER做用户验证
2016/05/04 PHP
判断多个input type=file是否有已经选择好文件的代码
2012/05/23 Javascript
onbeforeunload与onunload事件异同点总结
2013/06/24 Javascript
javascript客户端遍历控件与获取父容器对象示例代码
2014/01/06 Javascript
修复bash漏洞的shell脚本分享
2014/12/31 Javascript
在Mac OS下使用Node.js的简单教程
2015/06/24 Javascript
JS实现自动切换文字的导航效果代码
2015/08/27 Javascript
jquery专业的导航菜单特效代码分享
2015/08/29 Javascript
使用BootStrapValidator完成前端输入验证
2016/09/28 Javascript
微信小程序开发探究
2016/12/27 Javascript
微信小程序 this和that详解及简单实例
2017/02/13 Javascript
原生JavaScript实现Tooltip浮动提示框特效
2017/03/07 Javascript
如何理解Vue的render函数的具体用法
2017/08/30 Javascript
webpack 样式加载的实现原理
2018/06/12 Javascript
vue主动刷新页面及列表数据删除后的刷新实例
2018/09/16 Javascript
Node.js操作MongoDB数据库实例分析
2020/01/19 Javascript
JS中FileReader类实现文件上传及时预览功能
2020/03/27 Javascript
python样条插值的实现代码
2018/12/17 Python
Django 实现将图片转为Base64,然后使用json传输
2020/03/27 Python
详解CSS3 rem(设置字体大小) 教程
2017/11/21 HTML / CSS
英国家庭家具、照明和花园家具购物网站:Furniture123
2018/12/31 全球购物
彪马香港官方网上商店:PUMA香港
2020/12/06 全球购物
2013英文求职信模板范文
2013/11/15 职场文书
化学学院毕业生自荐信范文
2013/12/17 职场文书
《最佳路径》教学反思
2014/04/13 职场文书
电气工程及其自动化专业毕业生自荐信
2014/06/21 职场文书
音乐教育专业自荐信
2014/09/18 职场文书
2014年最新个人对照检查材料范文
2014/09/25 职场文书
2014年职称评定工作总结
2014/11/26 职场文书
水电施工员岗位职责
2015/04/11 职场文书
工作失职自我检讨书
2015/05/05 职场文书
go设置多个GOPATH的方式
2021/05/05 Golang
关于React Native使用axios进行网络请求的方法
2021/08/02 Javascript
JavaScript实现栈结构详细过程
2021/12/06 Javascript