首页 > 解决方案 > 在 python 中打印非 ascii 文本

问题描述

我正在使用 python2,我想将非 utf-8 文本转换为可读字符串。我也在尝试使用 latin-1 和 utf-8 进行解码。但我没有成功。

这是字符串

s =  ' ¤¿à¤²à¤¾ मेंदान रोड़ इंदौर'

我试过了:

s.decode('utf-8')

我得到以下输出:

u' \xc3\u201a\xc2\xa4\xc3\u201a\xc2\xbf\xc3\u0192\xc2 \xc3\u201a\xc2\xa4\xc3\u201a\xc2\xb2\xc3\u0192\xc2 \xc3\u201a\xc2\xa4\xc3\u201a\xc2\xbe \xc3\u0192\xc2 \xc3\u201a\xc2\xa4\xc3\u201a\xc2\xae\xc3\u0192\xc2 \xc3\u201a\xc2\xa5\xc3\xa2\xc2\u20ac\xc2\xa1\xc3\u0192\xc2 \xc3\u201a\xc2\xa4\xc3\xa2\xc2\u20ac\xc2\u0161\xc3\u0192\xc2 \xc3\u201a\xc2\xa4\xc3\u201a\xc2\xa6\xc3\u0192\xc2 \xc3\u201a\xc2\xa4\xc3\u201a\xc2\xbe\xc3\u0192\xc2 \xc3\u201a\xc2\xa4\xc3\u201a\xc2\xa8 \xc3\u0192\xc2 \xc3\u201a\xc2\xa4\xc3\u201a\xc2\xb0\xc3\u0192\xc2 \xc3\u201a\xc2\xa5\xc3\xa2\xc2\u20ac\xc2\xb9\xc3\u0192\xc2 \xc3\u201a\xc2\xa5\xc3\u2026\xc2\u201c \xc3\u0192\xc2 \xc3\u201a\xc2\xa4\xc3\xa2\xc2\u20ac\xc2\xa1\xc3\u0192\xc2 \xc3\u201a\xc2\xa4\xc3\xa2\xc2\u20ac\xc2\u0161\xc3\u0192\xc2 \xc3\u201a\xc2\xa4\xc3\u201a\xc2\xa6\xc3\u0192\xc2 \xc3\u201a\xc2\xa5\xc3\u2026\xc2\u2019\xc3\u0192\xc2 \xc3\u201a\xc2\xa4\xc3\u201a\xc2\xb0'

上面的输出仍然不可读。

任何帮助将不胜感激

标签: python-2.7utf-8

解决方案


首先第一件事:你必须阅读这个,没有任何借口

完成后,您将了解在不知道原始编码的情况下尝试将字节字符串解码为 un​​icode 主要是浪费时间。

第二点:this(为便于阅读而缩短):

u' \xc3\u201a\xc2\xa4\xc3\u201a\xc2\xbf\xc3\u0192\xc2 '

是 Python 的 unicode 字符串的内部表示 - 通过显示字节字符串的内部表示,您会得到类似的东西:

$ python
Python 2.7.15rc1 (default, Apr 15 2018, 21:51:34) 
[GCC 7.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> s = "¤¿à¤²ÃÂ"
>>> s # internal representation
'\xc3\x83\xe2\x80\x9a\xc3\x82\xc2\xa4\xc3\x83\xe2\x80\x9a\xc3\x82\xc2\xbf\xc3\x83\xc6\x92\xc3\x82 \xc3\x83\xe2\x80\x9a\xc3\x82\xc2\xa4\xc3\x83\xe2\x80\x9a\xc3\x82\xc2\xb2\xc3\x83\xc6\x92\xc3\x82'
>>> print(s) # readable output
¤¿à¤²ÃÂ

因此,您在这里唯一的问题是将内部表示与“人类可见”输出混淆

现在请注意,字符串最终将如何显示给用户取决于执行渲染的软件(如果从命令行运行 python 并打印到标准输出,则您的 xterm 或等效项,如果将其渲染为服务器端生成的 HTTP 的一部分,则您的浏览器响应等)和系统设置,所有这些都超出了 Python 的职责范围。


推荐阅读