我解析了一个HTML文档并在其中包含俄文文本。当我试图在Python中打印时,我明白了:
ÐлÑбниÑнÑй новогодний пÑнÑ
我试图解码它,我得到了ISO-8859-1编码。我试图像这样解码它:
print drink_name.decode('iso8859-1')
但是我收到了一个错误。如何打印此文本,或在Unicode?
中对其进行编码答案 0 :(得分:3)
你有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