json keyvalue打印期间打印的奇怪字符

2024-09-28 22:26:28 发布

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

我制作了一个python程序,使用omdbapihttp://www.omdbapi.com/获取电影/电视节目信息

我在打印电视节目的运行年份时出错了。下面是发生这种情况的代码部分:

keys = ['Title', 'Year', 'imdbRating', 'Director', 'Actors', 'Genre', 'totalSeasons']

def jsonContent(self):
        payload = {'t':self.title}
        movie = requests.get(self.url, params = payload)
        return movie.json()

def getInfo(self):
        data = self.jsonContent()
        for key, value in data.items():
            if key in keys:
                print key.encode('utf-8') + ' : ' + value.encode('utf-8')

例如,如果我搜索“我是怎么认识你妈妈的”,结果如下:

^{pr2}$

我该怎么解决这个问题?在


Tags: keyinself程序datavaluedefkeys
1条回答
网友
1楼 · 发布于 2024-09-28 22:26:28

在打印之前,您正在将Unicode文本编码为UTF-8:

print key.encode('utf-8') + ' : ' + value.encode('utf-8')

但是,您的控制台或终端没有配置为解释UTF-8。它被发送字节,然后根据不同的编解码器显示字符。在

您的value包含一个\u2013或{a1}字符,该字符编码为UTF-8,即3个字节E2 80 93,而您的终端似乎将其解码为Windows代码页437:

^{pr2}$

请重新配置您的控制台或终端,或将^{} environment variable设置为使用错误处理程序:

PYTHONIOENCODING=cp437:replace

:replace部分将告诉Python编码为cp437,但对它无法处理的字符使用占位符。你会得到一个问号:

>>> print value.encode('cp437', 'replace')
2005?2014

注意,在所有这些示例中,我必须显式地编码到CP437。您不需要,因为Python已经检测到您的配置,并将自动为您执行此操作。只需坚持直接打印Unicode。在

另一种方法是使用^{} package将非ASCII字符替换为近似值;它将用ASCII破折号替换en破折号:

>>> from unidecode import unidecode
>>> value
u'2005\u20132014'
>>> unidecode(value)
'2005-2014'

相关问题 更多 >