2016-11-01 2 views
0

Ich habe eine Datei mit Unicode Japanisch schreiben und ich möchte es in Shift-JIS konvertieren und es in Shift-JIS-codierte Datei ausdrucken. Ich tue dies:Python 3: mein Unicode2shift-jis-Skript funktioniert außer schreibt ASCII-Datei. Warum?

with open("unikanji.txt", 'rb') as unikanjif: 
    unikanji = unikanjif.read() 

sjskanji = unikanji.decode().encode('shift-jis') 

with open("kanji.txt", 'wb') as sjskanjif: 
    sjskanjif.write(sjskanji) 

Es funktioniert, außer dass, wenn ich öffnen kanji.txt es öffnet sich immer als Ansi-Datei, ohne Shift-JIS, und ich sehe misc Zeichen anstelle von Japanisch. Wenn ich die Dateikodierung manuell in Shift-JIS ändere, werden die verschiedenen Zeichen in die richtigen japanischen Zeichen umgewandelt. Wie mache ich mein Programm die Datei als Shift-JIS zu erstellen?

+0

Vielleicht möchten Sie [fragen] und [MCVE] lesen. – boardrider

+0

Dies ist ein Problem damit, wie Sie die Ausgabedatei öffnen, um sie zu lesen, nicht mit Ihrem Code, der Shift-jis-kodierten Text gut ausgibt. Der von Ihnen verwendete Texteditor erkennt die Codierung nicht richtig, aber das ist kein Problem mit der Datei oder dem Code, mit dem sie erstellt wird. – Blckknght

Antwort

0

"ANSI" ist Microsofts Bezeichnung für die standardmäßige lokalisierte Codierung, die je nach lokalisierter Windows-Version variiert. Ein Microsoft-Programm wie Notepad nimmt "ANSI" für die Codierung einer Textdatei an, es sei denn, es beginnt mit einer Byte-Reihenfolge-Markierung. Microsoft Notepad erkennt UTF-8-, UTF-16LE- und UTF-16BE-BOMs.

Shift-JIS ist eine lokalisierte Kodierung, daher müssen Sie einen Editor wie Notepad ++ verwenden und ihn manuell auf Shift-JIS konfigurieren, wie Sie festgestellt haben. Die Datei, wie Sie sie geschrieben haben ist Shift-JIS-codiert, aber wenn der Editor, den Sie verwenden, einige Heuristik hat, um die Codierung zu erkennen, muss sie manuell konfiguriert werden. Sie könnten auch japanische Windows verwenden oder den Standard für die Lokalisierung in Ihrer aktuellen Windows-Version ändern, und Shift-JIS könnte der ANSI-Standard sein.

Übrigens kann die Konvertierung von Codierungen etwas einfacher sein. Im Folgenden wird davon ausgegangen, dass die Originaldatei UTF-8 ist und die Zieldatei shift-jis lautet. utf-8-sig behandelt und entfernt automatisch eine Byte-Order-Markierung, falls vorhanden.

with open('unikanji.txt',encoding='utf-8-sig') as f: 
    text = f.read() 

with open('kanji.txt','w',encoding='shift-jis') as f: 
    f.write(text) 
Verwandte Themen