Python bekommen Zeichencode in verschiedenen Codierung?

Angesichts eines Zeichen-Codes als Integer-Nummer in einer Codierung, wie bekommst du den Zeichencode in, sagen wir, utf-8 und wieder als Integer?

3 Solutions collect form web for “Python bekommen Zeichencode in verschiedenen Codierung?”

UTF-8 ist eine Codierung mit variabler Länge , also werde ich davon ausgehen, dass du wirklich "Unicode-Code-Punkt" meinst. Verwenden Sie chr() , um den Zeichencode in ein Zeichen umzuwandeln, decodieren Sie es und verwenden Sie ord() , um den Codepunkt zu erhalten.

 >>> ord(chr(145).decode('koi8-r')) 9618 

Sie können nur eine "ganzzahlige Zahl" von einer Codierung zu einer anderen abbilden, wenn sie beide Single-Byte- Codierungen sind.

Hier ist ein Beispiel mit "iso-8859-15" und "cp1252" (aka "ANSI"):

 >>> s = u'€' >>> s.encode('iso-8859-15') '\xa4' >>> s.encode('cp1252') '\x80' >>> ord(s.encode('cp1252')) 128 >>> ord(s.encode('iso-8859-15')) 164 

Beachten Sie, dass ord hier verwendet wird, um die Ordnungszahl des codierten Bytes zu erhalten . Die Verwendung von ord auf dem ursprünglichen Unicode-String würde seinen Unicode-Code-Punkt geben :

 >>> ord(s) 8364 

Der umgekehrte Vorgang zu ord kann entweder mit chr (für Codes im Bereich 0 bis 127 ) oder unichr (für Codes im Bereich 0 bis sys.maxunicode ) durchgeführt werden:

 >>> print chr(65) A >>> print unichr(8364) € 

Bei Multi-Byte-Codierungen ist eine einfache "Integer-Nummer" -Markierung in der Regel nicht möglich.

Hier ist das gleiche Beispiel wie oben, aber mit "iso-8859-15" und "utf-8":

 >>> s = u'€' >>> s.encode('iso-8859-15') '\xa4' >>> s.encode('utf-8') '\xe2\x82\xac' >>> [ord(c) for c in s.encode('iso-8859-15')] [164] >>> [ord(c) for c in s.encode('utf-8')] [226, 130, 172] 

Die "utf-8" -Kodierung verwendet drei Bytes, um das gleiche Zeichen zu codieren, so dass eine Eins-zu-Eins-Abbildung nicht möglich ist. Allerdings sind viele Codierungen (einschließlich "utf-8") so konzipiert, dass sie ASCII-kompatibel sind, so dass eine Mapping in der Regel für Codes im Bereich von 0-127 möglich ist (aber nur trivial so, weil der Code immer gleich ist ).

Hier ist ein Beispiel dafür, wie der Codier- / Decodiertanz funktioniert:

 >>> s = b'd\x06' # perhaps start with bytes encoded in utf-16 >>> map(ord, s) # show those bytes as integers [100, 6] >>> u = s.decode('utf-16') # turn the bytes into unicode >>> print u # show what the character looks like ٤ >>> print ord(u) # show the unicode code point as an integer 1636 >>> t = u.encode('utf-8') # turn the unicode into bytes with a different encoding >>> map(ord, t) # show that encoding as integers [217, 164] 

Hoffe das hilft 🙂

Wenn Sie den Unicode direkt aus einer Ganzzahl konstruieren müssen, verwenden Sie unichr :

 >>> u = unichr(1636) >>> print u ٤ 
Python ist die beste Programmiersprache der Welt.