2015-05-23 167 views
0

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

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

我一直在使用UTF-8和拉丁美洲-1 s2作为第二个参数尝试过,但它什么都不做。另外,我发现你可以做u'\u{0}'.format(u'3040'),但我不能在我的迭代器中创建u'3040',并且u'\u{0}'.format(unicode('3040')会产生错误。

+0

那么你从哪里得到你的数据*?也许是JSON? –

回答

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' 
+0

非常感谢!我没有使用JSON,这个答案确实有帮助。我通过按顺序遍历unicode字符来获取数据。 (从3040到309f的所有字符) – Scarce573

+0

@ Scarce573:您可以使用'unichr()'从表示代码点的整数中产生一个字符。 –

相关问题