【问题标题】:Is there any possible way to display accented characters in Python interpreter?有没有办法在 Python 解释器中显示重音字符?
【发布时间】:2014-01-09 21:18:48
【问题描述】:

我正在尝试制作一个随机 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。

有任何解决方法或替代方法吗?谢谢。

【问题讨论】:

  • 您需要将环境设置为显示 unicode 字符,我认为 git bash 默认不会这样做。
  • 使用r_site.json() 而不是json.loads(r_site.text)。删除.encode('utf-8')
  • 这两者有区别吗? -- 我刚试了一下,偶尔出现重音字符时出现charmap codec can't encoding character错误

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


【解决方案1】:
import sys

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

其中“一些字符串”可以是以下之一:

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

所以不,如果您的终端的语言环境不支持该字符,则无法显示该字符。但这些选项可让您选择要执行的操作。

查看here 以获得更多参考。

【讨论】:

  • 你有没有推荐使用的最支持这些字符的终端?
  • 检查@abarnert 的答案,如果假设您使用的是python 3.x 是正确的,那么终端是非问题的(除非您使用的是Windows cmd 提示符,它不使用utf- 8)
  • 我正在使用 git bash 并且也尝试过 msysgit - 两个终端仍然有问题。
【解决方案2】:

假设您正在编写 3.x 风格的 print 函数调用,我假设这是 Python 3.x。

在 Python 3.x 中,printing 任何对象都会在该对象上调用 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 字节进行转义。

解决办法就是不要打电话给encode('utf-8')

您的困惑很可能是您阅读了 Python 2.x 的一些代码,其中 bytesstr 是同一类型,以及 print 实际想要的类型,并尝试在 Python 3 中使用它.x.

【讨论】:

    猜你喜欢
    • 2011-08-23
    • 2020-10-24
    • 1970-01-01
    • 1970-01-01
    • 2021-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-22
    相关资源
    最近更新 更多