2016-05-10 22 views
0

Hier sind ein paar Beispiele (Unicode) string:Wie konvertiert man eine Unicode-Zeichenfolge in eine literale Zeichenfolge in Python?

a = u'\u03c3\u03c4\u03b7\u03bd \u03a0\u03bb\u03b1\u03c4\u03b5\u03af\u03b1 \u03c4\u03bf\u03c5' 
b = u'\u010deprav so mu doma\u010di in strici duhovniki odtegovali denarno pomo\u010d . Kljub temu mu je uspelo' 
c = u'sovi\xe9ticas excepto Georgia , inclusive las 3 rep\xfablicas que hab\xedan' 

Mein Endziel ist auf den umgekehrten Schrägstrichen aufzuteilen (und Leerzeichen), so dass es wie folgt aussieht:

split_a = [u03c3, u03c4, u03b7, u03bd, ,u03a0, u03bb, u03b1, u03c4, u03b5, u03af, u03b1, ,u03c4, u03bf, u03c5] 
split_b = ['', 'u010deprav', 'so', 'mu', 'doma', 'u010di', 'in', 'strici', 'duhovniki' odtegovali denarno pomo', 'u010d', '.', 'Kljub', 'temu', 'mu', 'je', 'uspelo'] 
split_c = ['sovi', 'xe9ticas', 'excepto', 'Georgia', ',', 'inclusive', 'las', '3', 'rep', 'xfablicas', 'que', 'hab', 'xedan'] 

(Das leere Orte, an denen sowohl ein Leerzeichen als auch ein Backslash vorhanden sind, sind völlig in Ordnung.

Wenn ich versuche, dies zu teilen mit:

a.split("\\"), ist es nicht die Zeichenfolge überhaupt zu ändern.

Ich sah dieses Beispiel here, die mich denken lassen, dass ich meine Strings Literalstrings machen muss (mit r). Ich weiß jedoch nicht, wie ich meine große Liste von Strings in alle literalen Strings konvertieren soll.

Als ich danach suchte, bekam ich here. Mein Compiler gibt jedoch einen Fehler aus, wenn ich a.encode('latin-1').decode('utf-8') ausführen. Der Fehler ist 'latin-1' codec can't encode characters in position 0-3: ordinal not in range(256)

Also meine Frage ist: Wie kann ich eine Liste von Unicode-Strings nehmen, programmatisch durchlaufen durch sie und machen sie String-Literale, und dann auf einen Backslash aufgeteilt?

+0

Python ist eine interpretierte Sprache, so dass der Python-Interpreter den Fehler führt. – linusg

+0

Ich denke du bist ein bisschen über meinem Level, aber danke für die Info! –

Antwort

1

können Sie den unicode_escape Code verwenden, um eine Unicode-String in seine entkam Darstellung zu übersetzen.

split_a = a.encode('unicode_escape').split('\\') 

Ausgänge:

['', 
'u03c3', 
'u03c4', 
'u03b7', 
'u03bd ', 
'u03a0', 
'u03bb', 
'u03b1', 
'u03c4', 
'u03b5', 
'u03af', 
'u03b1 ', 
'u03c4', 
'u03bf', 
'u03c5'] 
+0

Das funktionierte für mich, wenn ich dann durch die "split_a" -Liste iterierte und "split" weiter auf "" (Leerzeichen). –

3

Sie haben eine Unicode-Zeichenfolge, die bereits einen Unicode-Codepunkt pro Zeichenfolgenelement hat. Die '\\' ist nur die Darstellung der Zeichenfolge, die auf die Konsole gedruckt wird, es ist nicht der eigentliche Inhalt.

Um eine Liste von Zahlen aus er zu machen, ist eigentlich ganz einfach:

split_a = [ord(c) for c in a] 

Wenn Sie die Buchstaben eine Reihe von Strings vornehmen müssen u durch den Hex-Wert, gefolgt bestehend, das ist nur etwas komplizierter :

split_a = ', '.join('u' + ('%04x' % ord(c)) for c in a) 
+0

Der zweite löste mein Problem für mein Beispiel oben. Ich habe meine Frage bearbeitet, um einige weitere Beispiel-Unicode-Strings aufzunehmen. Lassen Sie mich wissen, ob Sie eine Lösung für diese anderen Stringtypen haben. –

+0

War gerade dabei, Submit auf eine ähnliche Lösung zu pushen, also füge ich einfach einen Follow-up-Kommentar hinzu - Sie müssten etwas mehr arbeiten, um nur die Werte für Zeichen anzuzeigen, die unbekannte Codierungen sind. Insbesondere im Beispiel des OPs wird das Leerzeichen als "", gegen "u0020" gerendert. – Christian

+0

@python_in_trouble wow, das ist jetzt ein ganz anderes Problem, viel komplexer. –