2017-03-15 9 views
1

Ich habe ein ziemlich seltsames Problem mit PyCharm und einer Python-App, an der ich gerade arbeite.Öffnen einer UTF-8-codierten Datei mit einem Python 3.6-Skript in PyCharm 2016.3.2

  • PyCharm ist PyCharm Community Edition 2016.3.2
  • Das Projekt Interpreter ist: 3.6.0
  • OS MacOS Sierra ist

Wie ich schon seit einiger Zeit für eine Lösung googeln bin und keine vorgeschlagene Idee hilft mir hier zu fragen.

Ich mag eine UTF-8-codierte Datei öffnen, mit dem folgenden Code:

#!/usr/bin/env python3  

import os, platform 

def read(file): 
    f = open(file, "r") 
    content = f.read() 
    f.close() 
    return content 

print(platform.python_version()) 
print(os.environ["PYTHONIOENCODING"]) 

content = read("testfile") 
print(content) 

Der Code stürzt ab, wenn in PyCharm laufen. Der Ausgang ist

3.6.0 
UTF-8 
Traceback (most recent call last): 
    File "/Users/xxx/Documents/Scripts/pycharmutf8/file.py", line 14, in <module> 
    content = read("testfile") 
    File "/Users/xxx/Documents/Scripts/pycharmutf8/file.py", line 7, in read 
    content = f.read() 
    File "/usr/local/Cellar/python3/3.6.0_1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/encodings/ascii.py", line 26, in decode 
    return codecs.ascii_decode(input, self.errors)[0] 
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 5: ordinal not in range(128) 

Wenn ich den gleichen Code von der Kommandozeile ausgeführt wird, funktioniert es ganz gut:

./file.py 
3.6.0 
utf-8:surrogateescape 
I am a file with evil unicode characters: äöü 

Ich habe herausgefunden, dass in vergleichbaren Situationen Menschen die Umgebungsvariable PYTHONIOENCODING zu setzen geraten utf-8:surrogateescape, dass ich tat (wie Sie oben Ausgabe sehen in kann) systemweite

export PYTHONIOENCODING=utf-8:surrogateescape 

sondern auch in PyCharm selbst (Einstellungen -> Build -> Konsole -> Python-Konsole -> Umgebungsvariablen).

Dies hat keine Auswirkung. Hast du weitere Vorschläge?

+1

'open' verwendet' locale.getpreferredencoding (false) 'bei der Codierung zu erraten, so meine Vermutung, dass das Gebietsschema von PyCharm unterscheidet sich von Ihrem termi gesetzt ist nal. – MatsLindh

Antwort

0

Wenn Sie eine UTF-8-Datei lesen möchten, geben Sie die Codierung:

def read(file): 
    with open(file, encoding='utf8') as f: 
     content = f.read() 
+1

Danke. Das hat mein Problem gelöst. Ich frage mich jedoch, warum sich derselbe Code im Terminal (funktioniert) und in PyCharm (funktioniert nicht) anders verhielt. – drscheme

+0

Wie @Mats Kommentar sagt, müssen Pycharm und das Terminal auf verschiedene Gebietsschemas eingestellt sein. Der Fehler zeigt an, dass ASCII der Standardwert war, den Python auswählt, wenn das Gebietsschema nicht ermittelt werden kann. –

Verwandte Themen