解析HTML时出现UnicodeEncodeError

时间:2014-03-04 01:01:17

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

我正在尝试使用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

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

我通过重新配置区域设置

解决了这个问题

在debian中:

sudo dpkg-reconfigure locales

选择区域设置

en_US.UTF-8

然后选择此区域设置作为默认系统区域设置。