我正在使用BeautifulSoup,并尝试根据以下行读取一个用希伯来语编写并在windows-1255中编码的网站:
<meta http-EQUIV="Content-Type" Content="text/html; charset=windows-1255">
当我尝试对其进行编码时,出现以下错误:
> UnicodeEncodeError: 'charmap' codec can't encode characters in position 6949-6950: character maps to <undefined>
代码:
from bs4 import BeautifulSoup
import requests
r = requests.get('http://www.plonter.co.il')
soup = BeautifulSoup(r.text)
print soup.prettify().encode('windows-1255')
如果站点已经在 windows-1255 中编码,您应该对其进行解码以获取 unicode 或仅将其与当前编码一起使用。
--编辑我不知道r.text已经被解码了。
>>> import requests
>>> r = requests.get('http://www.plonter.co.il')
>>> isinstance(r.text, unicode)
True
>>> isinstance(r.content, unicode)
False
>>> isinstance(r.content, str)
True
>>> r.encoding
'ISO-8859-1'
>>> r.content.decode(r.encoding).encode('utf-8') # works
>>> r.content.decode(r.encoding).encode('windows-1255') # fails
>>> r.content.decode(r.encoding).encode('windows-1255', 'ignore'). # works
>>> r.content.decode(r.encoding).encode('windows-1252') # works
所以,我认为你把编码"弄错了"。"Windows-1255"无法处理内容编码而没有错误。另一方面,"utf-8","iso-8859-1"和"windows-1252"似乎能够处理它。
>>> r.content.decode(r.encoding) == r.text
True