想要python27打印出外来字符吗

2024-10-03 19:28:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用googleappengine和python2.7完成一个学校项目。我试图输出一个嵌套的字典,比如:{city:[{song1:artist1},{song2:artist2}], city2:[{song1:artist1},{song2:artist2}]}。然而,城市名称和歌曲来自世界各地,有着特殊的外国字符。当我打印字典时,我得到了这个字符串:

{'uOsaka'[{'u\u3086\u3081\u3044\u3089\u3093\u304b\u306d': u'Takajin Yashiki}等。。。(大阪是城市,unicode是歌曲,Takajin是艺术家)

有人知道如何正确显示城市/歌曲的名称吗?在


Tags: 项目字符串名称city字典字符歌曲学校
2条回答

How to print national characters in list representation?中一样,您需要使用自定义过程来打印数据,该过程将打印字符串本身而不是其repr

def nrepr(data):
    city_items=[]
    for city, jukebox in data.iteritems():
       jukebox_items=[]
       for song,artist in jukebox.iteritems():
           jukebox_items.append(u'"%s":"%s"' % (song,artist) )
       city_items.append(u'"%s":{%s}' % (city, u",".join(jukebox_items)))
    return u'{%s}' % u",".join(city_items)

>>>  data={u'Osaka':{u'\u3086\u3081\u3044\u3089\u3093\u304b\u306d':u'Takajin Yashiki'}}

>>> print nrepr(data)
{"Osaka":{"ゆめいらんかね":"Takajin Yashiki"}}

(在文件的开头使用from __future__ import unicode_literals,以避免在每个文本之前放置u

您不必限制模仿Python的默认输出格式,您可以以任何方式打印它们。在


或者,您可以为字符串使用unicode子类,该字符串将具有repr和国家字符:

^{pr2}$

这是有问题的'cuzrepr输出被假定只包含ASCII字符,各种代码依赖于此。You are extremily likely to get ^{}s in random places它还将打印mojibakeif a specific output channel's encoding is different from ^{} or if further transcoding is involved.

Python2.7中的基本问题是打印字典涉及到将其转换为字符串,而该字符串将是str,而不是unicode。因此你的输出。在

但是,当渲染单个项目时,您会发现它们很好:

>>> d = {u'Osaka': [{u'\u3086\u3081\u3044\u3089\u3093\u304b\u306d': u'Takajin Yashiki'}]} 
>>> for k, v in d.viewitems():
...   for pair in v:
...     for song, artist in pair.viewitems():
...         print k, song, artist
... 
Osaka ゆめいらんかね Takajin Yashiki

请注意,这是Python2的行为。在python3中,str是文本,该数据将被打印为UTF-8,并且应该在控制台中自然呈现,假设您为日语glyph安装了必要的字体:

^{pr2}$

相关问题 更多 >