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



我正在尝试制作一个随机的维基页面生成器,询问用户是否要访问随机的维基页面。但是,其中一些页面具有重音字符,我想在运行代码时以 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。

有什么解决方法或替代方案吗?谢谢。

import sys

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

其中"某些字符串"可以是以下之一:

  • "strict"(默认值)- 遇到不可打印的字符时引发 UnicodeError
  • "忽略" - 不打印不可编码的字符
  • "替换" - 将不可编码的字符替换为 ?
  • "XMLCHARREFREPLACE" - 将不可编码的字符替换为 XML 转义序列
  • "反斜杠替换" - 将不可编码的字符替换为转义的 Unicode 码位值

所以不,如果你的终端的区域设置不支持它,就没有办法让字符显示出来。但是这些选项允许您选择要执行的操作。

查看此处以获取更多参考。

我假设这是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'abcxcexa9'

为什么?因为bytes对象不是字符串,这就是bytes对象的打印方式 — 每个不可打印的 ASCII 字节的b前缀、引号和反斜杠转义。

解决方案就是不打电话给encode('utf-8').

最有可能的是,你阅读了一些 Python 2.x 的代码,其中 bytesstr 是相同的类型,print实际想要的类型,并尝试在 Python 3.x 中使用它。

相关内容

  • 没有找到相关文章

最新更新