【问题标题】:Unicode parsing errorUnicode 解析错误
【发布时间】:2026-02-17 09:30:01
【问题描述】:
from urllib.request import urlopen
html = urlopen("http://www.google.com/").read().decode('utf-8').replace("preview","")
from html.parser import HTMLParser
class MyHTMLParser(HTMLParser):
    def handle_data(self, data):
        if any(c.isalpha() for c in data):
            print(data)
MyHTMLParser().feed(html)
input()

所以我正在尝试制作一个程序来查看网站并保存数据,然后显示 HTML 的主要数据。这将完美地与谷歌一起工作,也完美地在 IDLE 中工作,但任何其他带有 unicode 字符的站点,如 cmd 中的\u2605(黑星)或\u00A9(版权)都会产生错误。此错误会立即关闭 cmd 窗口。回溯是:

"UnicodeEncodeError: 'charmap' 编解码器无法编码字符 '\u2122' 在第 8 位:字符映射到(未定义)”

我可以在网站上为大多数人提供很多 .(replace),但我确信有一种简单的方法可以将其转换为可以读取,或者只是将它们替换为 ""。

【问题讨论】:

    标签: python parsing unicode decode encode


    【解决方案1】:

    看完后:UnicodeEncodeError: 'charmap' codec can't encode - character maps to <undefined>, print function

    按照建议 #2,解决方案似乎涉及导入 sys 并使用 sys.stdout.encoding 和 errors='ignore' 对您的字符串进行编码

    html = urlopen("http://www.google.com/").read().encode(sys.stdout.encoding, errors='replace').decode('utf-8')`
    

    您可能需要再次解码...我不太确定,因为我没有在我的机器上设置此问题

    【讨论】:

    • 我改成 html = urlopen("google.com/…, errors='replace').decode('utf-8') new error unicode decode error 'utf-8' codec con't解码位置 5311 中的字节 0xff:无效的起始字节
    • 我认为你不能在 URLopen 方法中添加“错误”