python中的中文处理

下文讲的是基本原则:先解码成unicode,在程序中使用unicode,需要输出时再编码。
http://cocre.com/?p=461

下文是全攻略,有原理有实例:
http://www.sqlite.com.cn/MySqlite/11/395.Html

下面是一个小的实例,在正则表达式中使用中文:

所有汉字的Unicode编码范围:[\u4e00-\u9fa5]
Python中的str对应的范围:
Unicode区间:([\xB0-\xF7][\xA1-\xFE])+
所有GB2312-80编码:([\xA1-\xFE][\xA1-\xFE])+
所有中文空格:(\xA1\xA1)+

在Ulipad Shell中:

>>> import re
>>> zh_re = re.compile(r'([\xB0-\xF7][\xA1-\xFE])+')
>>> zh_re.search('中文')
<_sre.SRE_Match object at 0x03DCBBA0>
>>> zh_re.search(u'中文')
<_sre.SRE_Match object at 0x03DCBC20>
>>>


在CMD中:

>>> import re
>>> zh_re = re.compile(r'([\xB0-\xF7][\xA1-\xFE])+')
>>> zh_re.search('中文')
<_sre.SRE_Match object at 0x00B778E0>
>>> zh_re.search(u'中文')
>>> zh_re.search(u'中文'.encode('utf-8'))
<_sre.SRE_Match object at 0x00B77B60>
>>>


之所以与Ulipad Shell中不同,是因为Ulipad Shell默认是Unicode编码,而CMD中默认是GBK,所以必须将Unicode字符串人工编码成bytestrings才能匹配。

或者这样:

>>> zh_re = re.compile(ur"[\u4e00-\u9fa5]+")
>>> zh_re.search(u"中文")
<_sre.SRE_Match object at 0x00B05EC8>
>>>


这种方式在所有的Shell中都是通用的。

原文地址:https://www.cnblogs.com/crafter/p/2262935.html