从Jupyter IPython笔记本运行时,以下代码正常工作:
from bs4 import BeautifulSoup
xml_file_path = "<Path to XML file>"
s = BeautifulSoup(open(xml_file_path), "xml")
但是从Eclipse / PyDev(使用相同的Python解释器)运行时创建汤时失败了:
Traceback (most recent call last):
File "~/parser/scratch.py", line 3, in <module>
s = BeautifulSoup(open(xml_file), "xml")
File "/anaconda/lib/python3.5/site-packages/bs4/__init__.py", line 175, in __init__
markup = markup.read()
File "/anaconda/lib/python3.5/encodings/ascii.py", line 26, in decode
return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xef in position 1812: ordinal not in range(128)
更新
在Eclipse中导致问题的文件中的字符是�
,但这在IPython Notebook中没有问题!如果我从XML文件中删除此字符,那么代码也可以在Eclipse中正常工作。 Eclipse中是否有一些设置需要更改,以便代码不会在此(可能还有其他类似)字符上失败?
答案 0 :(得分:0)
我认为您必须使用open(xml_file_path,'rb')打开 - 并指定两者中的工作原理相同的编码(否则您将从字节到unicode进行隐式转换 - 显然它使用基于你的env的不同编码,因为你在Eclipse中有一些东西,在IPython中有另一种东西。)
尝试做:
with open(xml_file_path, 'rb') as stream:
contents = stream.read()
contents.decode('utf-8')
只是为了检查你是否真的能够将其解码为utf-8(即:检查该char是否是有效的utf-8字符)。