双字节十六进制值

时间:2017-08-08 16:10:55

标签: python python-2.7 utf-8

我刚刚开始,我希望我遵守所有规则。 我有一个字典,其键值对为{..., 'CL': 'León', ...},与西班牙语区域(即“CL”)的缩写相匹配,每个字符对应一个城市(即León)。我加入了

# _*_ coding: utf-8 _*_

一开始所以我能够使用像tildes这样的utf字符。问题在于,当我打印出单个值时,一切顺利,输出包括正确的波形:

print cities['CL']

然而,当我打印出整个字典时:

print cities

我有双字节十六进制字符,在本例中为\xc3\xb3

这是为什么? 提前谢谢。

1 个答案:

答案 0 :(得分:0)

对于字节字符串,还有另一种特定于python的编码:string-escape

>>> d = {'a' : 'тест', 'b': 'тост'}
>>> print repr(d).decode('string_escape')
{'a': 'тест', 'b': 'тост'}

Python 2 print语句调用其参数到string的转换。默认情况下,当此值包含非ascii字符时,它们将被转义。

我们可以从repr()内置和unescape借用another SO post获取此代表。

但是,如果值是正确的unicode字符串,例如前缀为u的字符串常量,则它们的表示和解码会有所不同。

>>> d = {'a' : u'тест', 'b': u'тост'}
>>> print d
{'a': u'\u0442\u0435\u0441\u0442', 'b': u'\u0442\u043e\u0441\u0442'}
>>> print repr(d).decode("unicode-escape")
{'a': u'тест', 'b': u'тост'}