unicode码,码制转换问题

理解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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值