2016-06-16 4 views
0

Zum Beispiel können Sie eine Unicode-Zeichenfolge explizit während der Initialisierung angeben können ein u vor dem String durch Hinzufügen wie unten dargestellt:Wie behandelt man die str-Variable als Unicode nach der Initialisierung für das OS-Modul in Python 2?

path1 = u'./테스트' 
# printing type of path1 returns 
<type 'unicode'> 

Auf der anderen Seite, wenn Sie es als eine normale Zeichenfolge zu initialisieren sind

path2 = './테스트' 
# printing type of path2 returns 
<type 'str'> 

Wenn ich die path Variablen an die os.listdir() Funktion zu übergeben wurde die Dateien in einem Verzeichnis zum Beispiel zu bekommen,

path1 wird gut funktionieren, während path2 einen Fehler wirft UnicodeDecodeError

Ich versuchte path2decode mit Umwandlung und es os.listdir()

path3 = path2.decode('unicode-escape') 
#printing type of path3 returns 
<type 'unicode'> 
#but passing it to os.listdir() threw the following error 
WindowsError: [Error 3] 

Inspektion der path Variablen vorbei ergab, dass Decodierung den Wert von path3

verändert hatte
path1 = ./테스트 
path2 = ./테스트 
path3 = ./íì¤í¸ 

verursacht das System zu jammern, dass es keinen Ordner mit dem Namengibt 0
also was fehlt mir? Gibt es eine andere Möglichkeit, eine String-Variable in Unicode zu verwandeln?

Antwort

1

'unicode-escape' macht nichts nützlich, es sei denn, Ihre Zeichenfolge enthält Unicode Escapes. Für normalen Text, der mit einem Zeichensatz dekodiert wurde, mit diesem Zeichensatz stattdessen.

>>> './테스트'.decode('utf8') 
u'./\ud14c\uc2a4\ud2b8' 
>>> print './테스트'.decode('utf8') 
./테스트 
+0

Danke! das hat den Trick gemacht !!! – greyowl

+0

Wenn das Python 2 ist, sollten Sie das wirklich als 'u './ 테테트' .decode ('utf8')' schreiben. Sie können ohne das 'u' entkommen, aber nur wenn Ihre Quelldatei auch als UTF-8 kodiert ist. – roeland

+0

@roeland: Nein, Sie dekodieren nicht 'Unicode' mit einem Zeichensatz. –