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列表list内建函数用法实例分析【insert、remove、index、pop等】
Jul 24 Python
Python实现的凯撒密码算法示例
Apr 12 Python
Python利用pandas计算多个CSV文件数据值的实例
Apr 19 Python
python调用pyaudio使用麦克风录制wav声音文件的教程
Jun 26 Python
Django单元测试工具test client使用详解
Aug 02 Python
python下载库的步骤方法
Oct 12 Python
通过celery异步处理一个查询任务的完整代码
Nov 19 Python
Python selenium模拟手动操作实现无人值守刷积分功能
May 13 Python
Matlab求解数组中的最大值及它所在的具体位置
Apr 16 Python
python实现的web监控系统
Apr 27 Python
Django分页器的用法你都了解吗
May 26 Python
详解python的异常捕获
Mar 03 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 获取远程网页内容的函数
2009/09/08 PHP
PHP print类函数使用总结
2010/06/25 PHP
php简单日历函数
2015/10/28 PHP
javascript this用法小结
2008/12/19 Javascript
Javascript中的变量使用说明
2010/05/18 Javascript
JavaScript中使用replace结合正则实现replaceAll的效果
2010/06/04 Javascript
jquery的Theme和Theme Switcher使用小结
2010/09/08 Javascript
JQuery获取各种宽度、高度(format函数)实例
2013/03/04 Javascript
用表格输出1-1000之间的数字实现代码(附特效)
2013/04/21 Javascript
关于jQuery中.attr()和.prop()的问题探讨
2013/09/06 Javascript
js 金额格式化来回转换示例
2014/02/23 Javascript
javascript生成img标签的3种实现方法(对象、方法、html)
2015/12/25 Javascript
Bootstrap媒体对象的实现
2016/05/01 Javascript
基于JavaScript FileReader上传图片显示本地链接
2016/05/27 Javascript
用jQuery实现优酷首页轮播图
2017/01/09 Javascript
基于vue实现分页/翻页组件paginator示例
2017/03/09 Javascript
js中DOM三级列表(代码分享)
2017/03/20 Javascript
javascript 通过键名获取键盘的keyCode方法
2017/12/31 Javascript
Nuxt.js踩坑总结分享
2018/01/18 Javascript
用Python和MD5实现网站挂马检测程序
2014/03/13 Python
python多线程共享变量的使用和效率方法
2019/07/16 Python
Python 实现自动导入缺失的库
2019/10/29 Python
Python yield生成器和return对比代码实例
2020/04/20 Python
详解Django自定义图片和文件上传路径(upload_to)的2种方式
2020/12/01 Python
使用Python爬虫爬取小红书完完整整的全过程
2021/01/19 Python
一款css实现的鼠标经过按钮的特效
2014/09/11 HTML / CSS
使用html5实现表格实现标题合并的实例代码
2019/05/13 HTML / CSS
在C语言中"指针和数组等价"到底是什么意思?
2014/03/24 面试题
中药学自荐信
2014/06/15 职场文书
群众路线教育党员自我剖析材料
2014/10/06 职场文书
2014年控辍保学工作总结
2014/12/08 职场文书
项目技术负责人岗位职责
2015/04/13 职场文书
党员干部廉洁自律承诺书
2015/04/28 职场文书
只需要100行Python代码就可以实现的贪吃蛇小游戏
2021/05/27 Python
深入理解CSS 中 transform matrix矩阵变换问题
2021/08/30 HTML / CSS
MySQL解决Navicat设置默认字符串时的报错问题
2022/06/16 MySQL