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实现排序算法
Feb 14 Python
Python下的Mysql模块MySQLdb安装详解
Apr 09 Python
zookeeper python接口实例详解
Jan 18 Python
python3实现字符串的全排列的方法(无重复字符)
Jul 07 Python
python实现AES和RSA加解密的方法
Mar 28 Python
使用python socket分发大文件的实现方法
Jul 08 Python
浅谈Python中的异常和JSON读写数据的实现
Feb 27 Python
在Django中预防CSRF攻击的操作
Mar 13 Python
Python中remove漏删和索引越界问题的解决
Mar 18 Python
virtualenv介绍及简明教程
Jun 23 Python
matplotlib实现数据实时刷新的示例代码
Jan 05 Python
Python学习之包与模块详解
Mar 19 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
smarty+adodb+部分自定义类的php开发模式
2006/12/31 PHP
php &amp;&amp; 逻辑与运算符使用说明
2010/03/04 PHP
适用于php-5.2 的 php.ini 中文版[金步国翻译]
2011/04/17 PHP
PHP中实现获取IP和地理位置类分享
2015/02/10 PHP
PHP CURL post数据报错 failed creating formpost data
2016/10/16 PHP
PHP实现的观察者模式实例
2017/06/21 PHP
PHP自动载入类文件函数__autoload的使用方法
2019/03/25 PHP
Jquery插件写法笔记整理
2012/09/06 Javascript
JavaScript中的关键字&quot;VAR&quot;使用详解 分享
2013/07/31 Javascript
javascript如何创建表格(javascript绘制表格的二种方法)
2013/12/10 Javascript
使用jQuery设置disabled属性与移除disabled属性
2014/08/21 Javascript
学习使用bootstrap基本控件(table、form、button)
2016/04/12 Javascript
node使用Koa2搭建web项目的方法
2017/10/17 Javascript
webpack打包node.js后端项目的方法
2018/03/10 Javascript
在小程序中使用腾讯视频插件播放教程视频的方法
2018/07/10 Javascript
解决在vue项目中webpack打包后字体不生效的问题
2018/09/01 Javascript
从组件封装看Vue的作用域插槽的实现
2019/02/12 Javascript
vue实现表单未编辑或未保存离开弹窗提示功能
2020/04/08 Javascript
JavaScript indexOf()原理及使用方法详解
2020/07/09 Javascript
JavaScript实现打字游戏
2021/02/19 Javascript
[46:02]DOTA2上海特级锦标赛D组资格赛#2 Liquid VS VP第二局
2016/02/28 DOTA
[25:45]2018DOTA2亚洲邀请赛4.5SOLO赛 Sylar vs Paparazi
2018/04/06 DOTA
python使用xlrd模块读取xlsx文件中的ip方法
2019/01/11 Python
Django框架模板文件使用及模板文件加载顺序分析
2019/05/23 Python
python3 打印输出字典中特定的某个key的方法示例
2019/07/06 Python
flask框架自定义url转换器操作详解
2020/01/25 Python
Tensorflow中的降维函数tf.reduce_*使用总结
2020/04/20 Python
安装多个版本的TensorFlow的方法步骤
2020/04/21 Python
详解pandas获取Dataframe元素值的几种方法
2020/06/14 Python
Java Unsafe类实现原理及测试代码
2020/09/15 Python
蒂娜商店:Tiina the Store
2019/12/07 全球购物
Napapijri西班牙在线商店:夹克、外套、运动衫等
2020/11/05 全球购物
车队司机自我鉴定
2014/03/02 职场文书
大学信息公开实施方案
2014/03/09 职场文书
2014年党员整改措施
2014/10/24 职场文书
MySQL基础(二)
2021/04/05 MySQL