[英]Python Encoding Error, not unicode string
如何摆脱“ u”而没有其他编码问题?
u"Example Characters : \xc3\xa9 \xc3\xa0"
这里显示的内容:
Example Characters : é Ã
代替 :
Example Characters : é à
在BeautifulSoup元素上使用getText()时遇到此问题。 (该网页使用的是UTF-8)
您有一个Mojibake (错误的输入解码)。
您很可能将Unicode字符串传递给BeautifulSoup()
。 不要这样做 ,将解码留给BeautifulSoup。
例如,如果您使用requests
,请使用response.content
而不是response.text
将HTML传递给BeautifulSoup()
。 否则,您将冒着将结果解码为Latin-1的风险,这是HTTP上文本响应的默认编码,而在标头中没有明确的字符集。 如果您使用urllib2
, 请不要先解码。
BeatifulSoup会为您检测编码和解码; 如果存在,它将使用HTML <meta>
标签。 应该正确自动检测UTF-8。 如果您from_encoding
知道编码,并且BeautifulSoup还是将其弄错了,请使用from_encoding
指定正确的编码:
soup = BeautifulSoup(htmlsource, from_encoding='utf8')
请参阅BeautifulSoup文档的“ 编码”部分 。
如果毕竟您仍能获得Mojibake结果,则该网页本身已生成具有错误编码值的数据。 在这种情况下,您可以使用以下方法来消除错误:
mojibake_string.encode('latin1').decode('utf8')
这将以正确的编码重新解释字符:
>>> u"Example Characters : \xc3\xa9 \xc3\xa0".encode('latin1').decode('utf8')
u'Example Characters : \xe9 \xe0'
>>> print _
Example Characters : é à
无需担心u
前缀; 那只是一个类型指示器,以显示您具有Unicode值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.