3

我解析了一个 HTML 文档并在其中包含俄语文本。当我尝试在Python中打印它时,我得到了这个:

ÐлÑбниÑнÑй новогодний пÑнÑ

我试图解码它,我得到了 ISO-8859-1 编码。我正在尝试像这样解码它:

print drink_name.decode('iso8859-1')

但我得到一个错误。如何打印此文本,或以Unicode对其进行编码?

4

1 回答 1

4

你有一个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
于 2014-11-11T16:44:56.673 回答