Python Unicode编码

使用技巧

事实上,只要遵守以下规则,可以规避90%由于Unicode字符串处理引起的bug,剩下的10%通过python的库和模块能够解决。

  • 程序中出现字符串时一定要加个前缀u。
  • 不要用str()函数,用unicode()代替。
  • 不要用过时的string模块——如果传给它的是非ASCII字符,它会把一切搞砸。
  • 不到必须时不要在你的程序里面解码unicode字符。只在你要写入文件或数据库或者网络时,才调用encode()函数;相应地,只在你需要把数据读回来的时候才调用decode()函数。

从现实中得来的教训

失误#1:你必须在一个极有限的时间内写出一个大型的应用,而且需要其他语言的支持,但是产品经理并没有明确定义这一点。你并没有考虑Unicode的兼容,知道项目快要结束……这时候再添加Unicode的支持几乎不太可能,不是吗?

结果#1:没能预测到最终用户对其他语言界面的需求,在集成他们用的面向其他语种的应用时又没有使用Unicode支持。更新整个系统即让人觉得枯燥,又浪费时间。

失误#2:在源码中到处使用string模块或者str()和chr()函数。

结果#2:通过全局的查找替换把str()和chr()替换成unicode()和unichr(),但是这样一来很可能就不能再用pickle模块,要用的话只能把所有要pickle处理的数据存成二进制形式,这样一来就必须修改数据库的结构,而修改数据库结构意味着全部推到重来。

失误#3:不能确定所有辅助系统都完全地支持Unicode。

结果#3:不得不去为那些系统打补丁,而其中有些系统可能你根本就没有源码。修复对Unicode支持的bug可能会降低代码的可靠性,而且非常有可能引入新的bug。

总结:使应用程序完全支持Unicode,兼容其它的语言本身就是一个工程。它需要详细的考虑、计划。所有涉及的软件、系统都需要检查,包括python的标准库和其他将要用到的第三方扩展模块。你甚至有可能需要组建一个经验丰富的团队来专门负责国际化(I18N)问题。

节选自《python核心编程(第二版)》P130、P131

原文地址:http://blog.51cto.com/juispan/2066625

时间: 2024-10-13 00:49:01

Python Unicode编码的相关文章

Python Unicode编码之基础知识

一.什么是Unicode 在Unicode之前,人们使用ASCII码,即每个英文字符都是以7位二进制数的方式存储在计算机内,其范围是32-126,所以ASCII码字符只能表示95个可打印字符:虽然随后将位数扩展值了8位,但依旧最多只能表示233个字符,对于成千上万的非欧洲语系的语言来说有极大的限制. Unicode通过使用一个或多个字节来表示一个字符的方法,突破了ASCII的限制,可以表示超过90000个字符. 二.怎么使用Unicode 从1.6版本起引进了Unicode字符串支持,用来转换多

Python Unicode编码之UTF-8编码

一.UTF-8编码简介 UTF-8就是在互联网上使用最广的一种unicode的实现方式.UTF-8最大的一个特点,就是它是一种变长的编码方式.它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度. 二.UTF-8编码规则 1.对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码.因此对于英语字母,UTF-8编码和ASCII码是相同的. 2.对于n字节的符号(n>1),第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10.剩下的没有提及的二进

python字符编码与解码 unicode,str

字符编码 计算机中的字符都是以特定的编码形式存放的,从最早的ascii到后来的Unicode以及UTF-8, 在python中, 字符串str也是是区分编码的,在各种编码的字符串之间,有一座桥梁,就是unicode类型. str, unicode str转到unicode需要解码,即decode:反之,unicode转到str需要编码,即encode: str              -- (decode) -->         unicode unicode     -- (encode)

python之分析decode、encode、unicode编码转换为汉字

decode()方法使用注册编码的编解码器的字符串进行解码.它默认为默认的字符串编码.decode函数可以将一个普通字符串转换为unicode对象.decode是将普通字符串按照参数中的编码格式进行解析,然后生成对应的unicode对象,比如在这里我们代码用的是utf-8,那么把一个字符串转换为unicode就是如下形式:s2='哈'.decode('utf-8′),s2就是一个存储了'哈'字的unicode对象,其实就和unicode('哈', 'utf-8′)以及u'哈'是相同的. 例: s

Python中的Unicode编码和UTF-8编码

下午看廖雪峰的Python2.7教程,看到 字符串和编码 一节,有一点感受,结合崔庆才的Python博客 ,把这种感受记录下来: ASCII码:是用一个字节(8bit, 0-255)中的127个字母表示大小写字母,数字和一些符号.主要用来表示现代英语和西欧语言. 所以处理中文就出现问题了,因为中文处理至少需要两个字节,所以中国制定了GB2312. 所以,各国制定了各国的标准.日本制定了Shift_JIS,韩国制定了Euc-kr...那么,乱码就来了. 为了统一,Unicode诞生了.统一码把所有

paip.utf-8,unicode编码的本质输出unicode文件原理 python

#别的语言,java php都是unicode,走十python不一样. #enddef #todo write to unicode encode fileHandle = open ( r"c:\fmtSmpEnRst.txt", 'w',encoding="UTF-16" ) #todox utf8 not decode...now  UTF-16是Unicode lines=file2list(f, encode="utf-16") 作者

python 字符串编码 str和unicode 区别以及相互转化 decode('utf-8') encode('utf-8')

python 字符串编码 str和unicode 区别以及相互转化 decode('utf-8') encode('utf-8') 原文地址:https://www.cnblogs.com/zhaoyingjie/p/9133020.html

Python字符编码转换Unicode和str

参考链接1:https://blog.csdn.net/VictoriaW/article/details/75314737 参考链接2:https://blog.csdn.net/sheldonwong/article/details/86684761 Unicode和str ## str 我们平时写的用引号括起来的字符串都是str类型的. >>> x = '哈哈' >>> x '\xb9\xfe\xb9\xfe' ### 根据上面的打印结果,可以知道str类型的x存

python中的字符串编码问题——2.理解ASCII码、ANSI码、Unicode编码、UTF-8编码

ASCII码:全名是American Standard Code for Information Interchange,ASCII码中,一个英文字母(不分大小写)占一个字节的空间,范围0x00~0x7f,即0-128. ANSI码:ANSI编码是一种对ASCII码的拓展.ANSI编码用0x00~0x7f 范围的1 个字节来表示 1 个英文字符,超出一个字节的 0x80~0xFFFF 范围来表示其他语言的其他字符.前126个与ASCII码相同,之后的字符全是某个国家语言的所有字符.容量2的16次