2016-04-21 5 views
0

Ich versuche, nicht-ASCII-Zeichen in Python mit utf-16-le, zu kodieren und hier ist der Ausschnitt aus dem Code dafür:Verwendung von UTF-16-Codierung in Python

import os 
import sys 

def run(): 
    print sys.getdefaultencoding() 
    reload(sys) 
    sys.setdefaultencoding('utf-16-le') 
    print sys.getdefaultencoding() 
    test_dir = unit_test_utils.get_test_dir("utkarsh") 
    dir_name_1 = '東京' 
    .... 
    .... 

if __name__ == '__main__': 
    run() 

Wenn dieser Code ist run, das ist der Fehler gesehen:

# /u/bin/python-qs /root/python/tests/abc.py -c  /root/test.conf  
  File "/root/python/tests/abc.py", line 27 
SyntaxError: Non-ASCII character '\xe6' in file /root/python/tests/abc.py on line 27, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details 

Wie kann das behoben werden? Ich habe versucht, diese Zeile am Anfang der Datei hinzufügen, aber ohne Erfolg:

# -*- coding: utf-16-le -*- 

Der Fehler dieses Mal war:

# /u/bin/python-qs /root/python/tests/abc.py -c /root/test.conf 
    File "/root/python/tests/abc.py", line 2 
    import os 
import sys 
... 
... 
if __name__ == '__main__': 
    run() 

    ^
SyntaxError: invalid syntax 

Edit:

Zeile 27: dir_name_1 = '東京 '

+2

dekodieren. Können Sie ein vollständiges Beispiel angeben, das diesen Fehler verursacht? –

+1

Ist Ihr Quellcode in utf-16 codiert? Überprüfen Sie mit 'Datei abc.py'. –

+0

@MichelBillaud Ausgabe: UTF-8 Unicode-Java-Programmtext – Maddy

Antwort

0

Alles ist (fast) in Ordnung in dem Code, den Sie zeigen. Sie haben eine Quelldatei in UTF-8 (wie von Ihrem Kommentar über das Ergebnis des file Befehls angegeben), so die Linie

dir_name_1 = '東京' 

in der Tat ist (wie Sie eine Python 2.x verwenden):

dir_name_1 = '\xe6\x9d\xb1\xe4\xba\xac' # utf8 for 東京 

Das einzige Problem ist, dass auf der Leitung 27 (die Sie zeigen nicht) Sie tun etwas mit dem String UTF8-codiert, wahrscheinlich versuchen, es zu konvertieren (explizit oder implizit) Unicode ohne jede Codierung Angabe , so ascii wird als Standard genommen und Fehler ist dann normal, da \xe6 nicht in as cii Bereich. Sie sollten die Zeichenfolge explizit mit dir_name_1.decode('utf8')

+0

Zeile 27:' dir_name_1 = '東京' '. Ich habe den Beitrag damit aktualisiert. – Maddy

+0

Wie bekomme ich die Zeichen UTF-16 codiert, wenn es möglich ist? Einer der Kommentare besagt, dass UTF-16 und UTF-32 für den Quelleditor nicht unterstützt werden. – Maddy

+0

Kann ich sie zu der Datei hinzufügen und sie lesen, wobei angegeben wird, dass der Inhalt UTF-16-codiert ist? – Maddy

Verwandte Themen