2016-09-28 3 views
1

Ich versuche, kyrillische Zeichen aus einer JSON-Datei zu lesen und dann an die Konsole mit Python 3.4.3 unter Windows auszugeben. Normaler Druck ('Russian Smth буквы') funktioniert wie vorgesehen.JSON auf der Konsole gedruckt zeigt falsche Codierung

Aber wenn ich JSON Inhalt drucke, scheint es in Windows-1251 zu drucken - "рЂѓЃЃЃєёμ Р" (obwohl meine Konsole, meine JSON-Datei und meine .py (mit Kodierung Kommentar) in UTF-8 sind).

Ich habe versucht, es neu zu Win-1251 und Konsole zu Win-1251 zu setzen, aber immer noch kein Glück.

Meine JSON (Codierte in UTF-8):

{ 
    "русские буквы": "что-то ещё на русском", 
    "english letters": "и что-то на великом" 
} 

Mein Code Wörterbuch laden:

def load_dictionary(): 
global Dictionary, isFatal 
try: 
    with open(DictionaryName) as f: 
     Dictionary = json.load(f) 
except Exception as e: 
    logging.critical('Error loading dictionary: ' + str(e)) 
    isFatal = True 
    return 
logging.info('Dictionary was loaded successfully') 

Ich versuche es auf 2 Arten (beide zeigen die Ausgabe das gleiche Kauderwelsch):

print(helper.Dictionary.get('rly')) 
print(helper.Dictionary) 

Ein interessantes Add-on: Ich habe das ganze russische Alphabet zu meiner JSON-Datei hinzugefügt und es scheint bei "С" Buchstaben stecken bleiben. (Fehler beim Laden des Wörterbuchs: "Charmap" -Codec kann Byte 0x81 in Position X nicht dekodieren: Zeichenkarten auf). Wenn ich diesen einen Buchstaben entferne, gibt es keine Ausnahme, aber das obige Problem bleibt bestehen.

+0

Wir sehen, wie Sie die JSON einlegen, aber wo und wie ausgeben Sie es? – deceze

+0

Diese Information hinzugefügt, sorry. @deceze –

+2

Wahrscheinlich 'offen (DictionaryName, encoding =" utf8 ")' hilft – nauer

Antwort

0

"Aber wenn ich JSON Inhalt drucken ..."

Wenn Sie es type Befehl drucken verwenden, dann erhalten Sie mojibakeСЂСѓСЃСЃРєРёРµ … statt русские … unter CHCP 1251 Umfang.

Versuchen Sie type unter CHCP 65001 (i.e. UTF-8) Bereich.

Folgen Sie nauer's advice, verwenden Sie open(DictionaryName, encoding="utf8").

Beispiel (39755662.json mit UTF-8 Codierung gespeichert ist):

==> chcp 866 
Active code page: 866 

==> type 39755662.json 
{ 
    "╤А╤Г╤Б╤Б╨║╨╕╨╡ ╨▒╤Г╨║╨▓╤Л": "╤З╤В╨╛-╤В╨╛ ╨╡╤Й╤С ╨╜╨░ ╤А╤Г╤Б╤Б╨║╨╛╨╝", 
    "rly": "╤А╤Г╤Б╤Б╨║╨╕╨╣" 
} 

==> chcp 1251 
Active code page: 1251 

==> type 39755662.json 
{ 
    "русские буквы": "что-то ещё на русском", 
    "rly": "СЂСѓСЃСЃРєРёР№" 
} 

==> chcp 65001 
Active code page: 65001 

==> type 39755662.json 
{ 
    "русские буквы": "что-то ещё на русском", 
    "rly": "русский" 
} 

==> 
Verwandte Themen