Tan*_*Woo 8 python unicode decode codec
>>> a = "?" # chinese
>>> b = unicode(a,"gb2312")
>>> a.__class__
<type 'str'>
>>> b.__class__
<type 'unicode'> # b is unicode
>>> a
'\xce\xd2'
>>> b
u'\u6211'
>>> c = u"?"
>>> c.__class__
<type 'unicode'> # c is unicode
>>> c
u'\xce\xd2'
Run Code Online (Sandbox Code Playgroud)
b并且c都是unicode,但>>> b输出u'\u6211'和>>> c输出u'\xce\xd2',为什么?
Fre*_*Foo 12
当你输入时"?",Python解释器从终端获取本地字符集中该字符的表示,由于它的原因,它以字节为单位存储在字符串中"".在我的UTF-8系统上,就是这样'\xe6\x88\x91'.在你的,这是'\xce\xd2'因为你使用GB2312.这解释了变量的价值a.
当你输入时u"?",Python解释器不知道?字符所在的编码.它的作用与普通字符串几乎相同:它将字符的字节存储在Unicode字符串中,将每个字节解释为Unicode代码点,因此错误的结果u'\xce\xd2'(或在我的盒子上u'\xe6\x88\x91').
此问题仅存在于交互式解释器中.编写Python脚本或模块时,可以在顶部附近指定编码,Unicode字符串将正确显示.例如,在我的系统上,下面两次打印liberté一词:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
print(u"liberté")
print("liberté")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1760 次 |
| 最近记录: |