2017-04-11 1 views
0

Der folgende Code funktioniert gut, wenn von Jupyter IPython Notebook laufen:BeautifulSoup Code funktioniert in IPython Notebook aber Eklipse nicht

from bs4 import BeautifulSoup 
xml_file_path = "<Path to XML file>" 
s = BeautifulSoup(open(xml_file_path), "xml") 

Aber es schlägt fehl, wenn die Suppe zu schaffen, wenn sie von Eclipse/PyDev laufen (die die gleiche Python verwendet Dolmetscher):

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-Version: 3.5.2 (Anaconda 4.1.1)
  • BeautifulSoup: Version 4
  • IPython Notebook-Version: 4.2.1
  • Eclipse-Version: Mars.2 Veröffentlichung (4.5.2)
  • PyDev Version: 5.1.2.20160623256
  • Mac OS X: El Capitan 10.11.6

UPDATE: Das Zeichen in der Datei, die in Eclipse Problem verursacht, ist , aber dies verursacht keine Probleme in IPython Notebook! Wenn ich dieses Zeichen aus der XML-Datei entferne, funktioniert der Code auch in Eclipse. Gibt es eine Einstellung in Eclipse, die ich ändern muss, damit der Code auf diesem (und möglicherweise anderen) Zeichen nicht fehlschlägt?

+0

Mögliches Duplikat von [UnicodeDecodeError: 'ascii' Codec kann Byte 0xef in Position 1 nicht dekodieren] (http://StackOverflow.com/questions/10561923/unicodedecodeerror-ascii-codec-cant-decode-byte-0xef- in-position-1) – DyZ

+0

@DYZ - Hier wird nicht gedruckt. Es passiert, wenn ich die Suppe erstelle. – arun

+0

Haben Sie versucht 'open (xml_file_path," utf-8 ")'? –

Antwort

0

Ich denke, dass Sie mit öffnen öffnen müssen (xml_file_path, 'rb') - und geben Sie die Codierung für die Dinge in beiden gleich (sonst haben Sie eine implizite Konvertierung von Bytes zu Unicode - und anscheinend verwendet es eine andere Codierung basierend auf Ihrem env, da Sie etwas in Eclipse und eine andere Sache in IPython haben).

Try tun:

with open(xml_file_path, 'rb') as stream: 
    contents = stream.read() 
    contents.decode('utf-8') 

Nur um zu überprüfen, ob Sie wirklich in der Lage sind, es als utf-8 zu dekodieren (d.h .: zu überprüfen, ob das Zeichen ein gültiges utf-8 Zeichen ist).