有没有办法在Python解释器中显示重音字符?

时间:2014-01-09 21:18:49

标签: python git bash unicode non-ascii-characters

我正在尝试创建一个随机的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。

任何变通办法或替代方案?感谢。

2 个答案:

答案 0 :(得分:0)

import sys

将您的编码更改为.encode(sys.stdout.encoding, errors="some string")

其中“some string”可以是以下之一:

  • 'strict'(默认值) - 遇到不可打印的字符时引发UnicodeError
  • '忽略' - 不要打印不可解码的字符
  • 'replace' - 用?
  • 替换不可编码的字符
  • 'xmlcharrefreplace' - 用xml转义序列替换不可编码的字符
  • 'backslashreplace' - 用转义的unicode代码点值替换不可编码的字符

所以不,如果您的终端的区域设置不支持,则无法显示该角色。但是这些选项让您可以选择做什么。

查看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的一些代码,其中bytesstr是相同的类型,以及print实际需要的类型,并尝试过在Python 3.x中使用它。