尝试刮取页面时出现编码问题

时间:2012-02-02 10:38:34

标签: python unicode encoding character-encoding

我正在使用beautifulSoup来刮取具有ISO-8859-1编码的页面,但是我遇到了我的小打嗝。

我的行有:

logging.info("Processing [%s]" % (link))

变量link是从beautifulsoup中删除的值之一。它是一个Unicode字符串,我可以通过键入print link来打印它。它在控制台上完全按照它的方式显示,但上面的行引发了这个错误:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 14: ordinal not in range(128)

我现在已经阅读了Unicode,但我无法弄清楚它为什么能够打印它但却无法记录它。

有问题的字符串是:

booba-concert-à-bercy

关于我搞砸了这个问题的任何想法?

谢谢。

2 个答案:

答案 0 :(得分:3)

logging不喜欢unicode;传递它的字节。

logging.info("Processing [%s]" % (link.encode('utf-8')))

答案 1 :(得分:2)

我设法通过在sitecustomize.py目录中添加名为Python/Lib/site-packages的文件来解决此问题。此文件包含两行:import syssys.setdefaultencoding('utf-8')

之前的默认编码是ascii因此问题。现在我不需要为链接变量指定显式编码,因为它使用默认编码,即utf-8并将其转换为。{/ p>

当然,在我的终端使用相同的编码之前,我永远不会看到这些字符,但这不会破坏我的代码。