BeautifulSoup代码适用于IPython Notebook但不适用于Eclipse

时间:2017-04-11 20:00:34

标签: python eclipse beautifulsoup pydev ipython-notebook

从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)
  • Python版本:3.5.2(Anaconda 4.1.1)
  • BeautifulSoup:版本4
  • IPython Notebook版本:4.2.1
  • Eclipse版本:Mars.2发布(4.5.2)
  • PyDev版本:5.1.2.20160623256
  • Mac OS X:El Capitan 10.11.6

更新 在Eclipse中导致问题的文件中的字符是,但这在IPython Notebook中没有问题!如果我从XML文件中删除此字符,那么代码也可以在Eclipse中正常工作。 Eclipse中是否有一些设置需要更改,以便代码不会在此(可能还有其他类似)字符上失败?

1 个答案:

答案 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字符)。