Frage

Ich habe einen Browser, das utf-8-Zeichen in meinem Python-Server sendet, aber wenn ich es aus dem Abfrage-String abzurufen, ist die Codierung, dass Python kehrt ASCII. Wie kann ich die Ebene String in UTF-8-Format konvertieren?

Hinweis: Die Zeichenfolge aus dem Web übergebene bereits UTF-8 codiert, ich möchte nur Python machen es als UTF-8 zur Behandlung von nicht ASCII

.
War es hilfreich?

Lösung

>>> plain_string = "Hi!"
>>> unicode_string = u"Hi!"
>>> type(plain_string), type(unicode_string)
(<type 'str'>, <type 'unicode'>)

^ Das ist der Unterschied zwischen einem Byte-String (plain_string) und einem Unicode-String.

>>> s = "Hello!"
>>> u = unicode(s, "utf-8")

^ Konvertieren in Unicode und Angabe der Codierung.

Andere Tipps

Wenn über die Methoden keine Arbeit tun, können Sie auch Python erzählen Teile einer Zeichenfolge zu ignorieren, dass es nicht zu utf-8 umwandeln kann:

stringnamehere.decode('utf-8', 'ignore')

vielleicht ein bisschen zu viel des Guten, aber wenn ich mit ASCII- und Unicode in gleichen Dateien arbeiten, zu dekodieren Wiederholung kann ein Schmerz, das ist, was ich benutze:

def make_unicode(input):
    if type(input) != unicode:
        input =  input.decode('utf-8')
        return input
    else:
        return input

Wenn Sie folgende Zeile am Anfang Ihrer Py-Datei:

# -*- coding: utf-8 -*-

können Sie kodieren Strings direkt in Ihrem Skript, wie folgt aus:

utfstr = "ボールト"

Wenn ich Dich richtig verstehe, haben Sie einen utf-8-kodierte Byte-Zeichenfolge in Ihrem Code.

Konvertieren eines Byte-String in einen Unicode-Zeichenfolge wird als Decodieren bekannt (Unicode -> Byte-String wird Codierung).

Sie tun, indem Sie mit der Unicode Funktion oder die dekodieren Methode. Entweder:

unicodestr = unicode(bytestr, encoding)
unicodestr = unicode(bytestr, "utf-8")

Oder:

unicodestr = bytestr.decode(encoding)
unicodestr = bytestr.decode("utf-8")
city = 'Ribeir\xc3\xa3o Preto'
print city.decode('cp1252').encode('utf-8')

In Python 3.6, sie haben keine eingebaute in Unicode () -Methode. Strings sind bereits als Unicode standardmäßig gespeichert und keine Konvertierung erforderlich ist. Beispiel:

my_str = "\u221a25"
print(my_str)
>>> √25

mit ord Übersetzen () und unichar (). Jedes Unicode-Zeichen haben eine Reihe asociated, so etwas wie einen Index. So Python hat einige Methoden zwischen einem Zeichen und seiner Nummer zu übersetzen. Kehrseite ist ein ñ Beispiel. Hoffe, dass es helfen kann.

>>> C = 'ñ'
>>> U = C.decode('utf8')
>>> U
u'\xf1'
>>> ord(U)
241
>>> unichr(241)
u'\xf1'
>>> print unichr(241).encode('utf8')
ñ
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top