Bon pour échanger des données avec le monde extérieur. Les deux moyens suivants sont nécessaires.
--Moyens d'encoder une chaîne en une chaîne d'octets
#Encodage de chaîne()Le premier argument de la fonction est le nom du codage.
#Chaîne Unicode"\u2603"Remplacer
>>> snowman="\u2603"
>>> len(snowman)
1
#Encodez ce caractère Unicode dans une séquence d'octets.
>>> ds=snowman.encode("utf-8")
>>> len(ds)
3
>>> ds
b'\xe2\x98\x83'
#Une erreur se produira sauf si le caractère Unicode est également un caractère ASCII valide.
>>> ds=snowman.encode("ascii")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can not encode character '\u2603' in position 0: ordinal not in range(128)
#encode()La fonction a un deuxième argument pour la rendre moins susceptible de provoquer une exception de codage. La valeur par défaut fonctionne comme avant"strict"Ainsi, si un caractère autre que ASCII est utilisé, UnicodeEncodeError se produira.
#Supprimer les éléments non codés en spécifiant ignorer
>>> snowman.encode("ascii","ignore")
b``
#Caractères qui ne peuvent pas être encodés à l'aide de replace?Remplacer par
>>> snowman.encode("ascii","replace")
b`?`
#unicode-Générez une chaîne Python Unicode au format d'échappement.
>>> snowman.encode("ascii","backslashreplace")
b`\\u2603`
#Générez une chaîne d'entités pouvant être utilisées sur des pages Web.
>>> snowman.encode("ascii","xmlcharrefreplace")
b`☃`
#valeur`café`Créer une chaîne Unicode pour
>>> place = "caf\u00e9"
>>> place
`café`
>>> type(place)
<class `str`>
#UTF-Encodez en 8 formats et placez_Affectez à la variable bytes.
>>> place_bytes=place.encode("utf-8")
#place_Notez que les octets font 5 octets
#Les 3 premiers octets sont les mêmes que ASCII(UTF-8 avantages)Chaque caractère est codé avec 1 octet, et le dernier é est codé avec 2 octets.
>>> place_bytes
b`caf\xc3\xa9`
>>> type(place_bytes)
<class `bytes`>
>>> place2=place_bytes.decode("utf-8")
>>> place2
`café`
#Le décodeur ASCII renvoie une erreur car la valeur d'octet 0xc3 n'est pas valide en ASCII.
>>> place3=place_bytes.decode("ascii")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: `ascii` codec can`t decode byte 0xc3 in position 3: ordinal not in range(128)
#UTF autant que possible-Il est préférable d'utiliser 8 encodages.
>>> place4=place_bytes.decode("latin-1")
>>> place4
`café`
>>> place5=place_bytes.decode("windows-1252")
>>> place5
`café`
Exemple: Contenu du fichier JPG (caractères octets)
FFD8FFE0 00104A46 49460001 0101004B 004B0000 FFFE0094 56542D43 6F6D7072 65737320 28746D29 2058696E 67205465 63686E6F 6C6F6779 20436F72 702E0000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 0000FFDB 00840010 0B0C0E0C 0A100E0D 0E121110 131828
Quand j'ai essayé le chapitre 7, c'est devenu une histoire de données, et les nombres binaires, les nombres hexadécimaux, l'intrication avec les octets, etc. sont sortis à la fois. J'ai étudié quand j'étais étudiant, mais je l'ai oublié, je vais donc le revoir petit à petit dans ce chapitre.
"Introduction à Python3 par Bill Lubanovic (publié par O'Reilly Japon)"
URL de référence http://zaq.g1.xrea.com/2sinsuu5.htm https://docs.python.org/ja/3/howto/unicode.html
Recommended Posts