如何在不使用u'\ uXXXX'的情况下打印unicode

时间:2015-05-23 18:03:58

标签: python python-unicode

我正在尝试制作一个程序来迭代日文字符(Python 2.7)并以可打印格式返回/生成它们,但是我无法将十六进制数字(3040-309f)转换为可以打印字符的格式。我发现使用u'\ u'有效,但当我尝试使用unicode('\ u3040')将数字转换为该格式时,它与u'\ u3040'不同。代码更好地解释了它。

>>> s1 = u'\u309d'
>>> s2 = unicode("\u209d")
>>> print type(s1) == type(s2)
True
>>> print s1 == s2
False
>>> print s1, s2
ゝ \u209d

我尝试将s2用作UTF-8和latin-1作为第二个参数,但它没有做任何事情。另外,我发现您可以执行u'\u{0}'.format(u'3040'),但我无法在迭代器中生成u'3040'u'\u{0}'.format(unicode('3040')会引发错误。

1 个答案:

答案 0 :(得分:3)

字节字符串文字中,\uhhhh转义序列未被解释,因此您将获得6个字符的字面值。

将其转换为Unicode只会将字符串解码为ASCII数据,而不是Python转义序列。

您可以使用unicode_escape编码进行解码:

>>> "\u209d".decode('unicode_escape')
u'\u209d'
>>> print "\u209d".decode('unicode_escape')
₝

然而,这有几个缺点。任何其他\转义序列被解码:

>>> '\\n'
'\\n'
>>> '\\n'.decode('unicode_escape')
u'\n'

所以你可能不得不首先用双倍的反斜杠替换反斜杠,然后保留这些反斜杠:

>>> '\\n'.replace('\\', '\\\\').decode('unicode_escape')
u'\\n'

非常小心您实际上并未尝试将 JSON数据视为Python字符串文字。 JSON 使用相同的转义序列格式,但应该被视为JSON;使用json.loads()进行解码:

>>> import json
>>> json.loads('"\u209d"')
u'\u209d'