unicode码,码制转换问题

    技术2024-12-27  18

    理解unicode: 在python里面关于字符串有两个类:str和unicode, 据说python3里面没有了unicode这个类了。 需要注意的是,Unicode只是一个符号集,它只规定了符号的二进制代码,却没有规定这个二进制代码应该如何存储。 也就是说unicode只是一个虚拟的东西,真正的实现方法是有很多的(UTF-8就是在互联网上使用最广的一种unicode的实现方式)。 我想当初为什么区分str和unicode类,可能主要是str表示的字节序列是一个有实际编码方式的字符串,而unicode字符串主要是记录的 是这个字符串在unicode字符集中对应的编号。 eg: >>> s1="燕子" >>> u1=u"燕子" >>> s1 '/xe7/x87/x95/xe5/xad/x90' >>> u1 u'/u71d5/u5b50' >>> print s1 燕子 >>> print u1 燕子 >>> 从上面的例子我们可以看出实际上s1字符串的编码方式采用了我们默认的“utf-8”形式 不过这里备注一下,python里面有一个外带的模块chardet可以很方便的实现字符串/文件的编码检测。 chardet官方网址:http://chardet.feedparser.org/ 码制问题: 在一般的python环境当中默认的编码是:ascii  默认的中文编码:utf-8 python系统里面提供了一个检测自己的默认码制的函数:sys.getdefaultencoding()查询,当然你也可以在site模块中设置默认的编码 在python当中编码转换一般都是以unicode作为中间转换编码的。 如图:

    字符串对象S.decode([encoding[,errors]]):将其他编码形式的字符串S转换成unicode字符码值的ascii码形式 eg:str1.decode('gb2312')     表示将gb2312编码的字符串转换为unicode字符码值的ascii码 字符串对象S.encode([encoding[,errors]]):将字符串对象S的unicode字符码值的ascii码转换为其他编码 eg:str1.encode('gb2312')     表示将unicode字符码值的ascii码转换为gb2312编码的字符串。 上面的decode和encode方法的两个参数encoding和errors的取值情况说明: encoding参数取值表:           值                                      描述                 'ascii'                              7位Ascii码    'latin-1'或'iso-8859-1'             ISO 8859-1 Latin-1           'cp1252'                      Windows 1252编码         'utf-8'                           8位变长编码           'utf-16'                        16位变长编码         'utf-16-le'                    UTF-16, 小尾编码         'utf-16-be'                    UTF-16, 大尾编码       'unicode-escape'             与unicode字面量u"string"相同的格式     'raw-unicode-escape'           与unicode字面量ur"string"相同的格式 errors参数取值表:         值                                         描述           'strict'                       遇到编码和解码错误时,引发UnicodeError异常        'ignore'                      忽略无效字符          'replace'                 将无效字符替换为一个替换字符(Unicode中的U+FFFD,标准字符串中的'?')      'backslashreplace'            将无效字符替换为python字符转义序列。例如,将字符U+1234替换为'/u1234'      'xmlcharrefreplace'           将无效字符替换为XML字符引用。例如,将字符U+1234替换为'&#4660' 在某些IDE中,字符串的输出总是出现乱码,甚至错误,其实是IDE的结果输出控制台本身不能显示字符串的编码,而不是程序本身的问题。 在python当中判断一个字符串是否是unicode对象,可以使用类似于:isinstance(s,unicode)   ----   判断字节序列s是否是unicode对象 python当中:            unicode(s[,encoding])  等同于   s.decode([encoding]) eg: >>> zn="燕子" >>> print zn 燕子 >>> zn '/xe7/x87/x95/xe5/xad/x90' >>> uni_zn=unicode(zn,"utf-8") >>> print uni_zn 燕子 >>> uni_zn u'/u71d5/u5b50' >>> uni_zn.encode("utf-8") '/xe7/x87/x95/xe5/xad/x90' >>>

    最新回复(0)