Ich bin mir der Tatsache bewusst, dass für Python & lt; 3, Unicode-Codierung für die Zeichenfolge "Pflanzen gegen Zombies ‰ ã ¢ 2" ist wie folgt:
%Vor%Was passiert, wenn ich eine Variable (zB appName) anstelle einer Zeichenkette habe? Kann ich das so machen:
%Vor%Für:
%Vor% Nein. Die u
-Notation gilt nur für String-Literale. Variablen, die Zeichenfolgedaten enthalten, benötigen nicht das u
, da die Variable ein Objekt enthält, das eine Unicode-Zeichenfolge oder eine Byte-Zeichenfolge ist. (Ich nehme an, dass appName
String-Daten enthält; wenn dies nicht der Fall ist, macht es keinen Sinn zu versuchen, es zu codieren. Konvertieren Sie es zuerst in einen Byte-String oder Unicode.)
Ihre Variable enthält also entweder eine Unicode-Zeichenfolge oder eine Byte-Zeichenfolge. Wenn es eine Unicode-Zeichenfolge ist, können Sie einfach appName.encode("utf-8")
ausführen.
Wenn es sich um eine Byte-Zeichenfolge handelt, ist sie bereits mit einer Codierung codiert. Wenn es bereits als UTF-8 codiert ist, ist es bereits so, wie Sie es wollen, und Sie müssen nichts tun. Wenn es in einer anderen Kodierung ist und Sie es in UTF-8 bekommen wollen, können Sie appName.decode('the-existing-encoding').encode("utf-8")
machen.
Beachten Sie, dass das Ergebnis möglicherweise nicht Ihren Erwartungen entspricht, wenn Sie das ausführen, was Sie in Ihrer bearbeiteten Frage anzeigen. Sie haben:
%Vor% Ohne das u
im String-Literal haben Sie in einigen Kodierungen einen bytestring erzeugt, nämlich die Kodierung Ihrer Quelldatei. Wenn sich Ihre Quelldatei nicht in UTF-8 befindet, befinden Sie sich in der letzten Situation, die ich oben beschrieben habe. Es gibt keine Möglichkeit, "nur einen Unicode-String zu erstellen", nachdem Sie ihn als Nicht-Unicode erstellt haben. Wenn Sie es als Nicht-Unicode erstellen, erstellen Sie es in einer bestimmten Kodierung, und Sie müssen wissen, welche Kodierung es ist, um es in Unicode zu decodieren (so können Sie es dann in eine andere Kodierung kodieren, wenn Sie möchten) / p>