我解析了一个 HTML 文档,其中包含俄语文本。当我尝试打印它时Python http://en.wikipedia.org/wiki/Python_%28programming_language%29,我明白了:
ÐлÑбниÑнÑй новогодний пÑнÑ
我尝试解码它并得到 ISO-8859-1 编码。我试图像这样解码它:
print drink_name.decode('iso8859-1')
但我收到错误。我如何打印此文本,或将其编码为Unicode http://en.wikipedia.org/wiki/Unicode?
你有一个Mojibake http://en.wikipedia.org/wiki/Mojibake;在本例中,UTF-8 字节解码为 Latin-1 或 CP1251。
您可以通过相反的过程来修复它:
>>> print u'ÐлÑбниÑнÑй новогодний пÑнÑ'.encode('latin1').decode('utf8')
Клубничный новогодний пунш
(我必须从原始帖子源复制字符串以捕获 Mojibake 中的所有不可打印字节)。
更好的方法是没有错误解码首先。您使用错误的编码解码原始文本,请改用 UTF-8 作为编解码器。
如果你用过requests
下载页面,请勿使用response.text
在这种情况下;如果服务器无法识别特定的编解码器,则 HTTP RFC 默认使用 Latin-1,但 HTML 文档通常将编码嵌入到<meta>
标题代替。在这种情况下,将解码留给解析器,例如 BeautifulSoup:
response = requests.get(url)
soup = BeautifulSoup(response.content) # pass in undecoded bytes
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)