gpt4 book ai didi

python - BeautifulSoup,Python 3,编码错误

转载 作者:行者123 更新时间:2023-12-05 07:57:26 25 4
gpt4 key购买 nike

我在使用 BeautifulSoup 时遇到编码问题。在我的开发环境中一切正常(Ubuntu、Python 3.4、Django 开发服务器)。在生产服务器上(Ubuntu、Python 3.4、相同版本的 Django 和 BeautifulSoup - 唯一的区别是使用 gunicorn 和 Nginx)我得到:

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

trackback 显示问题出在语句“BeautifulSoup(data)”中。

data = open(os.path.join(BASE_DIR, 'data/file.xml'))
data = BeautifulSoup(data)

BeautifulSoup 似乎尝试使用 ascii,但文件是 utf-8 编码的。我尝试了在堆栈溢出时可以找到的不同方法,但其中大部分都依赖于 Python 2 - 但我使用的是 Python 3。我也尝试过类似的方法:

data = BeautifulSoup(str(data.read()))

但这行不通。

非常感谢任何帮助。

最佳答案

您没有编码错误。您有一个解码编码错误。这里真正有问题的是 open() 调用;您没有指定编码,因此使用系统默认值,在您的系统上,默认值是 ASCII。

您想将 字节 传递给 BeautifulSoup:

with open(os.path.join(BASE_DIR, 'data/file.xml'), 'rb') as datafile:
data = BeautifulSoup(datafile)

BeautifulSoup 将从那里负责解码。我还将文件处理切换为使用 with 语句;文件对象是上下文管理器,这样在任何情况下它都会为您正确关闭。

由于您打开的是 XML,而不是 HTML,您可能想通知 BeautifulSoup:

with open(os.path.join(BASE_DIR, 'data/file.xml'), 'rb') as datafile:
data = BeautifulSoup(datafile, 'xml')

您需要安装 LXML 才能正常工作。

关于python - BeautifulSoup,Python 3,编码错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27229572/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com