【问题标题】:UnicodeEncodeError while parsing HTML解析 HTML 时出现 UnicodeEncodeError
【发布时间】:2014-03-04 01:01:16
【问题描述】:

我正在尝试使用 python3 的 HTMLParser 解析 HTML 页面。


编辑:
尝试使用以下方式打印字符:

 print ('\u25bc') #Prints the '▼' character

抛出 UnicodeEncodeError。


代码是文档示例中提供的代码:

class MyHTMLParser(HTMLParser):
    def handle_starttag(self, tag, attrs):
        print("Start tag:", tag)
        for attr in attrs:
            print("     attr:", attr)
    def handle_endtag(self, tag):
        print("End tag  :", tag)
    def handle_data(self, data):
        print("Data     :", data)
    def handle_comment(self, data):
        print("Comment  :", data)
    def handle_entityref(self, name):
        c = chr(name2codepoint[name])
        print("Named ent:", c)
    def handle_charref(self, name):
        if name.startswith('x'):
            c = chr(int(name[1:], 16))
        else:
            c = chr(int(name))
        print("Num ent  :", c)
    def handle_decl(self, data):
        print("Decl     :", data)

当输入一个 HTML 文档(UTF-8 字符串)时,我得到了错误:

UnicodeExcodeError
'ascii' codec can't encode character '\u25bc' in position 0: ordinal not in range(128)

解析器 getpos() 方法的违规行是:

#                                          |-- Parser stopped here.
                <li><a href="#" class="dir">&#9660; Community</a>

读取的字节被正确解码为 UTF-8 字符串,然后被馈送到解析器的 feed() 方法,由于某种原因试图将其编码为 ASCII。

系统区域设置默认设置为“POSIX”,但使用本地设置为 en_US.UTF-8

export LANG=en_US.UTF-8

我该如何解决这个问题?

【问题讨论】:

    标签: python-3.x unicode utf-8 html-parsing ascii


    【解决方案1】:

    我已经通过重新配置语言环境解决了这个问题

    在 debian 中:

    sudo dpkg-reconfigure locales
    

    选择地区

    en_US.UTF-8
    

    然后选择此语言环境作为默认系统语言环境。

    【讨论】:

    • 如果您需要重定向到文件或管道,那么您可以使用:PYTHONIOENCODING=utf-8 python3 -c'print("\u25bc")' | cat
    猜你喜欢
    • 1970-01-01
    • 2016-06-22
    • 1970-01-01
    • 1970-01-01
    • 2014-09-26
    • 2012-06-19
    • 1970-01-01
    • 2013-09-16
    相关资源
    最近更新 更多