这个Python unicode是否会出错?

时间:2015-07-30 15:07:42

标签: python unicode

我正在学习Python编码的东西,我遇到了以下情况,这对我来说很有用,我想知道原因。

首先,这是我的环境:OSX 10.10.3

命令echo $LC_CTYPE, $LANG的输出是: en_US.UTF-8, en_US.UTF-8

python --version的输出为Python 2.7.6

然后我输入python进入python shell:

>>> import sys; reload(sys); sys.setdefaultencoding('utf8')
<module 'sys' (built-in)>
>>> s16 = u'我'.encode('utf16')
>>> s16
'\xff\xfe\x11b'
>>> for c in s16:
...   ord(c)
... 
255
254
17
98
>>> s16_ = '\xff\xfe\x11\x62'
>>> s16_
'\xff\xfe\x11b'

所以我的问题是:对于最后一行和第四行,为什么Python输出'\xff\xfe\x11b'而不是'\xff\xfe\x11\x62'

2 个答案:

答案 0 :(得分:3)

当Python在Python 2中打印字节(str)时,如果它是可打印的,它会打印该字节的相应ASCII字符,否则十六进制将转义它。

\x62对应于ASCII'b'。你可以通过查看那个字节来看到这个:

>>> '\x62'
'b'

答案 1 :(得分:0)

b是一个可打印字符,因此repr()将显示字符本身,而不是转义表单。

参考:str.isprintable

  

请注意,此上下文中的可打印字符是在字符串上调用repr()时不应转义的字符。