Python string-Codierung für eine variable
Ich bin mir der Tatsache bewusst, dass für Python < 3, unicode-Codierung für die Zeichenkette 'Plants vs. Zombies‰ã¢ 2' ist wie folgt:
u"Plants vs. Zombies䋢 2".encode("utf-8")
Was ist, wenn ich eine variable (sagen appName) anstatt ein string kann ich es so machen:
appName = "Plants vs. Zombies䋢 2"
u+appName.encode("utf-8")
Für:
appName = appName.encode('utf-8');
'ascii' codec can't decode byte 0xe4 in position 18: ordinal not in range(128)
- Sicher, wenn es hat
.encode
Methode. - Warum nicht Sie versuchen und sehen, was passiert?
- Wenn
appName
ist ein unicode-string dann können Sie einfachappName.encode()
. Wenn das nicht funktioniert, Sie müssen nicht einunicode
string vielleicht. - Nein, nicht mit, dass
u
business. - Sicherlich, wenn er definiert
u
variable. - Ich denke, Sie verkennen die Frage, aber das ist nicht verwunderlich, denn die Frage ist nicht gut erklärt. Mein Eindruck ist, dass er versucht, die
u
einer Variablen zu, wie er zu einer Zeichenkette wieu"blah"
, das ist nicht möglich. - Ich verstehe die Frage. Ich bin-lustig-machen. Ich Stimme, um es zu schließen, denn es sollte "beweisen ein minimales Verständnis des Problems gelöst wird" und es funktioniert nicht. Offensichtlich OP nicht verstehen, was
u
(vor einem string) bedeutet. - Du verwechselst die syntax zum erstellen einer
unicode
Wert im Quellcode mit den vorhandenen Werten.u'...'
schafft eineunicode
string. Sie brauchen nicht zu verwendenu
für vorhandene Variablen, ist es einfach spezielle syntax zu unterscheiden, eineunicode
string aus einem normalen string. - Wie erstellen Sie eine
list
Objekt mit eckigen Klammern ([1, 2, 3]
) oder ein Wörterbuch mit geschweiften Klammern ({'foo': 'bar'}
),u'...'
ist ein literal-object-notation. - Noch strenger als das. [] ist tatsächlich ein operator, die Konstrukte, die zur Laufzeit eine Liste von mehreren Ausdrücken, die könnten alles sein. u-Präfix nicht einen Ausdruck akzeptieren, es zwingt zu einer unterschiedlichen interpretation der lexikalischen token zur Analysezeit.
- Bin ich nicht, aber der Fragesteller ist.
- oops, das waren in der Tat richtet sich gegen die OP, nicht Sie.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht. Die
u
notation ist nur für string-Literale. Variablen mit string-Daten nicht benötigenu
, weil die variable ein Objekt enthält, das entweder einen unicode-string oder ein byte-string. (Ich gehe davon aus, dass hierappName
enthält string-Daten; falls nicht, macht es keinen Sinn zu versuchen zu codieren. Konvertieren Sie es in einen bytestring-oder unicode-ersten.)Also deine variable enthält entweder einen unicode-string oder ein byte-string. Wenn es ein unicode-string ist, können Sie nur tun
appName.encode("utf-8")
.Wenn es ein byte-string, dann ist es bereits codiert einige Codierung. Wenn es schon als UTF-8 kodiert, dann ist es schon wie Sie es wollen, und Sie brauchen nicht, etwas zu tun. Wenn es in einer anderen Kodierung aus, und Sie wollen es in UTF-8, die Sie tun können
appName.decode('the-existing-encoding').encode("utf-8")
.Beachten Sie, dass wenn Sie tun, was Sie in der show bearbeitet, die Frage, das Resultat könnte nicht das sein, was Sie erwarten. Sie haben:
Ohne die
u
auf das string-literal, das Sie erstellt haben, ein bytestring in einigen Codierung, nämlich die Kodierung der Quelldatei. Wenn Ihre Quell-Datei nicht im UTF-8, dann hast du in der letzten situation habe ich oben beschrieben. Es gibt keine Möglichkeit zum "einfach nur ein string unicode", nachdem Sie ihn erstellt haben, wie nicht-unicode. Wenn Sie es schaffen als nicht-unicode, erstellen Sie es in einer bestimmten Codierung, und Sie müssen wissen, welche Kodierung das ist, um Sie zu entschlüsseln, um unicode (so kann man dann codieren Sie es zu einer anderen Codierung, wenn Sie möchten).Your variable either contains a unicode string or a byte string
Wo ist das angegeben?u
und durch sein Beispiel mit einem string-literal. Ich verdeutlichte meine Antwort zu sagen, ich gehe davon ausappName
enthält string-Daten.Nicht. die u-Präfix ändert sich die Bedeutung eines string-Konstante (so dass es eine unicode-Konstante). Es ist kein Betreiber (die angewandt werden könnten, um einen beliebigen Ausdruck).
Denke ich, können Sie versuchen, folgende Zeile:
s = "Plants vs. Zombies䋢 2"
unicode(s, errors='ignore').encode('ascii')
Kann es übersetzen alle string-Variablen, um unicode-Typ, Standard ist die Verwendung von 'ascii', dann Kodieren Sie diese mit 'ascii', die den Typ normal geworden string-Typ.
Update für Python 3:
s.decode('ascii', 'ignore').encode('ascii')
https://docs.python.org/2/howto/unicode.html
Beste Weg, um konvertieren von string zu bytes in Python 3?