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?
'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