我正在尝试创建一个随机的wiki页面生成器,询问用户是否要访问随机Wiki页面。但是,其中一些页面有重音字符,我想在运行代码时在git bash中显示它们。我正在使用cmd模块来允许用户输入。现在,我显示标题的方式是使用
r_site = requests.get("http://en.wikipedia.org/w/api.php?action=query&list=random&rnnamespace=0&rnlimit=10&format=json")
print(json.loads(r_site.text)["query"]["random"][0]["title"].encode("utf-8"))
有时可行,但每当出现重音字符时,它会显示为25 \ xe2 \ x80 \ x9399。
任何变通办法或替代方案?感谢。
答案 0 :(得分:0)
import sys
将您的编码更改为.encode(sys.stdout.encoding, errors="some string")
其中“some string”可以是以下之一:
所以不,如果您的终端的区域设置不支持,则无法显示该角色。但是这些选项让您可以选择做什么。
查看here以获取更多参考资料。
答案 1 :(得分:0)
我认为这是Python 3.x,因为你正在编写3.x风格的print
函数调用。
在Python 3.x中,print
任何对象在该对象上调用str
,然后将其编码为sys.stdout.encoding
以进行打印。
所以,如果你传递一个Unicode字符串,它就可以正常工作(假设你的终端可以处理Unicode,并且Python正确猜到了sys.stdout.encoding
):
>>> print('abcé')
abcé
但是,如果你传递一个bytes
对象,就像你通过调用.encode('utf-8')
得到的那个对象一样,str
函数将它格式化为:
>>> print('abcé'.encode('utf-8'))
b'abc\xce\xa9'
为什么呢?因为bytes
对象不是字符串,而且bytes
对象的打印方式是b
前缀,引号和每个非可打印ASCII字节的反斜杠转义。 / p>
解决方案就是不要拨打encode('utf-8')
。
很可能您的困惑在于您阅读了Python 2.x的一些代码,其中bytes
和str
是相同的类型,以及print
实际需要的类型,并尝试过在Python 3.x中使用它。