Python Black Magic-Kodierungskonvertierungsmethode
In diesem Artikel wird hauptsächlich die Codierungskonvertierung von Python Black Magic vorgestellt und die Methode der Python-Codierungskonvertierung analysiert.
Wir verwenden andere Sprachen, wenn die Bibliothek die Codierung durchführt Bei der Konvertierung gibt es normalerweise nur zwei (oder drei) Möglichkeiten, mit Zeichen umzugehen, die nicht verstanden werden können:
-
Eine Ausnahme auslösen
wird durch das alternative Zeichen
überspringen
source -> unicode -> dest
-Zeichenfolge aus der ursprünglichen Kodierung In Unicode konvertieren. Konvertieren Sie dann Unicode in die Zielkodierung.
Im ersten Schritt verwenden wir im Allgemeinendecode() oder unicode() diese beiden Funktionen Fertig. Im zweiten Schritt verwenden wir zur Vervollständigung die Funktion
encode().
errors. Schauen Sie sich die offizielle Beschreibung an:
Fehler können angegeben werden, um einen anderen Fehler festzulegen
Die Standardeinstellung ist „streng“, was bedeutet, dass Kodierungsfehler auftreten
ein UnicodeDecodeError. Weitere mögliche Werte sind „ignore“ und „replace“
sowie alle anderen Name, der bei Codecs registriert ist.
in der Lage ist, UnicodeDecodeErrors zu verarbeiten.
strikter Standardwert. Wenn ein Codierungsfehler auftritt, wird UnicodeDecodeError ausgelöst.
Überspringen ignorieren.
ersetzen Ersetzen durch ?
Wird zur Behandlung von UnicodeDecodeError verwendet.
codecs.register_error(name, error_handler)
Der Name des Fehlerhandlers . Wird zum Ausfüllen des Fehlerparameters der Dekodierfunktion verwendet. error_handler: Verarbeitungsfunktion. Diese Funktion akzeptiert einen Ausnahmeparameter.
Gibt ein Tupel zurück. Das erste ist die fehlerkorrigierte Zeichenfolge und das zweite ist die Startposition, um mit der Dekodierung fortzufahren. Werfen wir einen Blick auf die konkrete Implementierung:
Das Obige habe ich aus dem Internet kopiert
def cjk_error(e): if not isinstance(e, UnicodeDecodeError): raise TypeError("don't know how to handle %r" % exc) if exc.end + 1 > len(exc.object): raise TypeError('unknown codec ,the object too short!') ch1 = ord(exc.object[exc.start:exc.end]) newpos = exc.end + 1 ch2 = ord(exc.object[exc.start + 1:newpos]) sk = exc.object[exc.start:newpos] if 0x81<=ch1<=0xFE and (0x40<=ch2<=0x7E or 0x7E<=ch2<=0xFE): # GBK return (unicode(sk,'cp936'), newpos) if 0x81<=ch1<=0xFE and (0x40<=ch2<=0x7E or 0xA1<=ch2<=0xFE): # BIG5 return (unicode(sk,'big5'), newpos) raise TypeError('unknown codec !') codecs.register_error("cjk_replace", cjk_replace)
Beispielsweise haben utf8 und gbk einen Schnittpunkt in den ersten beiden Bytes. Wenn eine utf8-Zeichenfolge mit der GBK-Kodierung dekodiert wird, tritt der Fehler ab dem dritten Byte auf (die ersten beiden Bytes können auch einem chinesischen Zeichen im GBK-Kodierungsbereich entsprechen). Zum Beispiel:
Für diese Situation wurden also die folgenden Verbesserungen vorgenommen:
a = "你" # utf8编码:'\xe4\xbd\xa0' c = unicode(a[:2],'gbk') # 正常返回 c = unicode(a, 'gbk') # UnicodeDecodeError 。错误发生在第三个字节
Natürlich ist diese Logik eigentlich nicht streng genug. Obwohl es etwas realistisch ist, mit dieser Anomalie der gemischten Codierung umzugehen.
import codec def cjk_replace(e): if not isinstance(e, UnicodeDecodeError): raise TypeError("invalid exception type %s" e) src = e.encoding if src in ('gbk','gb18030', 'big5'): beg = e.start - 2 if beg >= 0: try: return unicode(e.object[beg:e.end], 'utf8'), e.end + 1 except: pass if exc.end + 1 > len(exc.object): raise TypeError('unknown codec ,the object too short!') ch1 = ord(exc.object[exc.start:exc.end]) newpos = exc.end + 1 ch2 = ord(exc.object[exc.start + 1:newpos]) sk = exc.object[exc.start:newpos] if src != 'gbk' and 0x81<=ch1<=0xFE and (0x40<=ch2<=0x7E or 0x7E<=ch2<=0xFE): # GBK return (unicode(sk,'cp936'), newpos) if src != 'big5' and 0x81<=ch1<=0xFE and (0x40<=ch2<=0x7E or 0xA1<=ch2<=0xFE): # BIG5 return (unicode(sk,'big5'), newpos) raise TypeError('unknown codec !') codecs.register_error("cjk_replace", cjk_replace)
Das obige ist der detaillierte Inhalt vonPython Black Magic-Kodierungskonvertierungsmethode. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Lösung für Erlaubnisprobleme beim Betrachten der Python -Version in Linux Terminal Wenn Sie versuchen, die Python -Version in Linux Terminal anzuzeigen, geben Sie Python ein ...

Wie lehre ich innerhalb von 10 Stunden die Grundlagen für Computer -Anfänger für Programmierungen? Wenn Sie nur 10 Stunden Zeit haben, um Computer -Anfänger zu unterrichten, was Sie mit Programmierkenntnissen unterrichten möchten, was würden Sie dann beibringen ...

Bei der Verwendung von Pythons Pandas -Bibliothek ist das Kopieren von ganzen Spalten zwischen zwei Datenrahmen mit unterschiedlichen Strukturen ein häufiges Problem. Angenommen, wir haben zwei Daten ...

Wie kann man nicht erkannt werden, wenn Sie Fiddlereverywhere für Man-in-the-Middle-Lesungen verwenden, wenn Sie FiddLereverywhere verwenden ...

Regelmäßige Ausdrücke sind leistungsstarke Tools für Musteranpassung und Textmanipulation in der Programmierung, wodurch die Effizienz bei der Textverarbeitung in verschiedenen Anwendungen verbessert wird.

Wie hört Uvicorn kontinuierlich auf HTTP -Anfragen an? Uvicorn ist ein leichter Webserver, der auf ASGI basiert. Eine seiner Kernfunktionen ist es, auf HTTP -Anfragen zu hören und weiterzumachen ...

Wie erstellt in Python ein Objekt dynamisch über eine Zeichenfolge und ruft seine Methoden auf? Dies ist eine häufige Programmieranforderung, insbesondere wenn sie konfiguriert oder ausgeführt werden muss ...

In dem Artikel werden beliebte Python-Bibliotheken wie Numpy, Pandas, Matplotlib, Scikit-Learn, TensorFlow, Django, Flask und Anfragen erörtert, die ihre Verwendung in wissenschaftlichen Computing, Datenanalyse, Visualisierung, maschinellem Lernen, Webentwicklung und h beschreiben
