【问题标题】:python - Cant encode 'windows-1255' pagepython - 无法编码'windows-1255'页面
【发布时间】:2018-04-11 14:57:43
【问题描述】:

我正在使用 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') 

【问题讨论】:

    标签: python web-scraping character-encoding beautifulsoup


    【解决方案1】:

    如果站点已经在 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
    

    【讨论】:

    • 我很困惑...似乎在使用 UTF-8 编码的页面中,编码和解码都可以正常工作,但仍然在这个站点中编码得到上面的错误 anf 解码返回:'UnicodeEncodeError:'ascii '编解码器无法对位置 7189-7190 中的字符进行编码:序数不在范围内(128)'
    猜你喜欢
    • 1970-01-01
    • 2012-11-13
    • 1970-01-01
    • 2013-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多