【问题标题】:Encoding issue when trying to scrape a page尝试抓取页面时出现编码问题
【发布时间】:2012-02-02 10:38:33
【问题描述】:

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

关于我在哪里搞砸的任何想法?

谢谢。

【问题讨论】:

    标签: python unicode encoding character-encoding


    【解决方案1】:

    logging 不喜欢unicode;传递字节数。

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

    【讨论】:

    • 嗨,伊格纳西奥。那对我不起作用。我仍然得到同样的错误。我的环境是否有其他一些设置可能导致这种情况。谢谢。
    • 如果我将字符串编码为 cp850 这似乎是 Windows 终端编码,它可以正常工作,但我想知道为什么即使我将您的示例中的编码指定为 utf-8 它仍然尝试将其编码为 ASCII。
    • 我设法通过在我的Python/Lib/site-packages 目录中添加一个名为sitecustomize.py 的文件来解决这个问题。该文件包含两行:import syssys.setdefaultencoding('utf-8')。之前的默认编码是ascii,因此存在问题。现在我不需要为 link 变量指定显式编码,因为它使用默认编码,即 utf-8 并将其转换为该编码。这是解决问题的好方法吗?当然,在我的终端使用相同的编码之前,我永远不会正确看到这些字符,但这不会破坏我的代码。
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多