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