Python Language Conversion entre les données str ou bytes et les caractères unicode


Exemple

Le contenu des fichiers et des messages réseau peut représenter des caractères codés. Ils doivent souvent être convertis en Unicode pour un affichage correct.

Dans Python 2, vous devrez peut-être convertir des données str en caractères Unicode. La valeur par défaut ( '' , "" , etc.) est une chaîne ASCII, les valeurs en dehors de la plage ASCII étant affichées en tant que valeurs échappées. Les chaînes Unicode sont u'' (ou u"" , etc.).

Python 2.x 2.3
# You get "© abc" encoded in UTF-8 from a file, network, or other data source

s = '\xc2\xa9 abc'  # s is a byte array, not a string of characters
                    # Doesn't know the original was UTF-8
                    # Default form of string literals in Python 2
s[0]                # '\xc2' - meaningless byte (without context such as an encoding)
type(s)             # str - even though it's not a useful one w/o having a known encoding

u = s.decode('utf-8')  # u'\xa9 abc'
                       # Now we have a Unicode string, which can be read as UTF-8 and printed properly
                       # In Python 2, Unicode string literals need a leading u
                       # str.decode converts a string which may contain escaped bytes to a Unicode string
u[0]                # u'\xa9' - Unicode Character 'COPYRIGHT SIGN' (U+00A9) '©'
type(u)             # unicode

u.encode('utf-8')   # '\xc2\xa9 abc'
                    # unicode.encode produces a string with escaped bytes for non-ASCII characters

Dans Python 3, vous devrez peut-être convertir des tableaux d'octets (appelés «littéraux d'octets») en chaînes de caractères Unicode. La valeur par défaut est désormais une chaîne Unicode, et ByteString littéraux doit maintenant être entré comme b'' , b"" , etc. Un octet littéral retourne True à isinstance(some_val, byte) , en supposant some_val être une chaîne qui pourrait être codé en octets.

Python 3.x 3.0
# You get from file or network "© abc" encoded in UTF-8

s = b'\xc2\xa9 abc' # s is a byte array, not characters
                    # In Python 3, the default string literal is Unicode; byte array literals need a leading b
s[0]                # b'\xc2' - meaningless byte (without context such as an encoding)
type(s)             # bytes - now that byte arrays are explicit, Python can show that.

u = s.decode('utf-8')  # '© abc' on a Unicode terminal
                       # bytes.decode converts a byte array to a string (which will, in Python 3, be Unicode)
u[0]                # '\u00a9' - Unicode Character 'COPYRIGHT SIGN' (U+00A9) '©'
type(u)             # str
                    # The default string literal in Python 3 is UTF-8 Unicode

u.encode('utf-8')   # b'\xc2\xa9 abc'
                    # str.encode produces a byte array, showing ASCII-range bytes as unescaped characters.