Explication détaillée de la solution Python3 aux problèmes difficiles de codage de caractères

PHPz
Libérer: 2017-04-02 13:23:49
original
1530 Les gens l'ont consulté

L'une des améliorations les plus importantes de

Python3 est de résoudre le gros problème laissé par la string et l'encodage des caractères dans Python2. Pourquoi le codage Python est-il si pénible ? Certaines failles dans la conception des chaînes Python2 ont été introduites :
- L'utilisation du code ASCII comme méthode d'encodage par défaut est très peu conviviale pour le traitement chinois.
- Diviser de force les chaînes en deux types, unicode et str, trompant les développeurs

Bien sûr, ce n'est pas un bug Tant que vous faites plus attention lors du traitement, vous pouvez éviter ces pièges. Mais en Python3, les deux problèmes sont très bien résolus.

Tout d'abord, Python3 définit le codage par défaut du système sur UTF-8

>>> import sys
>>> sys.getdefaultencoding()
'utf-8'
>>>
Copier après la connexion

Ensuite, les caractères de texte et les données binaires sont plus clairement distingués, représentés respectivement par str et octets. Tous les caractères de texte sont représentés par le type str. str peut représenter tous les caractères du jeu de caractères Unicode , tandis que les données d'octets binaires sont représentées par un nouveau type de données , représenté par des octets.

str

>>> a = "a"
>>> a
'a'
>>> type(a)
<class &#39;str&#39;>
>>> b = "禅"
>>> b
&#39;禅&#39;
>>> type(b)
<class &#39;str&#39;>
Copier après la connexion

bytes

En Python3, ajoutez 'b' avant le caractère guillemet pour indiquer clairement qu'il s'agit d'un objet de type octets , en fait, il s'agit de données composées d'un ensemble de séquences d'octets binaires. Le type d'octets peut être des caractères de la plage ASCII et d'autres données de caractères sous forme hexadécimale, mais il ne peut pas être représenté par des caractères non-ASCII tels que le chinois.

>>> c = b&#39;a&#39;>>> c
b&#39;a&#39;>>> type(c)
<class &#39;bytes&#39;>

>>> d = b&#39;\xe7\xa6\x85&#39;>>> d
b&#39;\xe7\xa6\x85&#39;>>> type(d)
<class &#39;bytes&#39;>
>>>

>>> e = b&#39;禅&#39;
  File "<stdin>", line 1SyntaxError: bytes can only contain ASCII literal characters.
Copier après la connexion

Le type bytes fournit les mêmes opérations que str, prenant en charge des opérations telles que le partitionnement, l'indexation et les opérations numériques de base. Cependant, l'opération + ne peut pas être effectuée sur des données de type str et bytes, bien qu'elle soit réalisable dans py2.

>>> b"a"+b"c"
b&#39;ac&#39;
>>> b"a"*2
b&#39;aa&#39;
>>> b"abcdef\xd6"[1:]
b&#39;bcdef\xd6&#39;
>>> b"abcdef\xd6"[-1]
214
>>> b"a" + "b"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can&#39;t concat bytes to str
Copier après la connexion

encoder et décoder

La conversion entre str et bytes peut être effectuée à l'aide des méthodes d'encodage et de décodage.

encode est responsable de la conversion du codage des caractères en octets. Par défaut, le codage UTF-8 est utilisé.

>>> s = "Python之禅"
>>> s.encode()
b&#39;Python\xe4\xb9\x8b\xe7\xa6\x85&#39;
>>> s.encode("gbk")
b&#39;Python\xd6\xae\xec\xf8&#39;
Copier après la connexion

decode est responsable du décodage et de la conversion des octets en caractères, et utilise généralement le format de codage UTF-8 pour la conversion.

>>> b&#39;Python\xe4\xb9\x8b\xe7\xa6\x85&#39;.decode()
&#39;Python之禅&#39;
>>> b&#39;Python\xd6\xae\xec\xf8&#39;.decode("gbk")
&#39;Python之禅&#39;
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal