2017-04-11 109 views
0

从Jupyter IPython的笔记本电脑运行时,下面的代码工作正常:BeautifulSoup代码在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(阿纳康达4.1.1)
  • BeautifulSoup:版本4
  • IPython的笔记本版本:4.2.1
  • Eclipse版本:Mars.2版本(4.5.2)
  • PyDev的版本:5.1.2.20160623256
  • 的Mac OS X:埃尔卡皮坦10.11.6

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

+0

[UnicodeDecodeError:'ascii'编解码器无法解码位置1中的字节0xef](http://stackoverflow.com/questions/10561923/unicodedecodeerror-ascii-codec-cant-decode-byte-0xef- in-position-1) – DyZ

+0

@DYZ - 这里没有打印。它发生在我创造汤时。 – arun

+0

您是否试过'open(xml_file_path,“utf-8”)'? –

回答

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解码(即:检查是否该字符是一个合法的UTF-8字符)。

相关问题