Un bon article sur STR et UNICODE
Organisation du contenu lié au codage python
Remarque : la discussion suivante concerne la version Python2.x, Py3k est à essayer
Démarrer
Lorsque vous utilisez python pour traiter le chinois, lire des fichiers ou des messages, des paramètres http, etc.
Dès que je l'exécute, des caractères tronqués sont trouvés (traitement de chaînes, lecture Écrire un fichier, imprimer)
Ensuite, ce que la plupart des gens font est d'appeler encode/decode pour le débogage, sans penser clairement à la raison pour laquelle les caractères tronqués apparaissent
Donc le erreurs les plus courantes lors du débogage
Erreur 1
Traceback (dernier appel le plus récent) : Fichier "
Erreur 2
Traceback (dernier appel le plus récent) : Fichier "
Tout d'abord
Vous devez avoir un concept général, comprendre le jeu de caractères, l'encodage des caractères
ASCII Unicode | -8 | etc.
Notes sur l'encodage des caractères : ASCII, Unicode et UTF-8
Blog Taobao Search Technology - Discussion sur le codage chinois
str et unicode
à la fois str et unicode C'est une sous-classe de basestring
, il existe donc une méthode pour déterminer s'il s'agit d'une chaîne
def is_str(s) : return isinstance(s, basestring)
conversion str et unicode
décoder le document
encoder le document
str -> decode('the_coding_of_str') -> unicode unicode -> ; encode('the_coding_you_want') -> str
Différence
str est une chaîne d'octets, codée par la méthode de déclaration unicode
composée d'octets
s = 'Chinese' s = u'中文'.encode('utf-8' ) >>> type( 'Chinese')
Trouver la longueur (renvoie le nombre d'octets)
>>> u'中文'.encode('utf-8') 'xe4xb8xadxe6x96x87' >>>
Méthode de déclaration
s = u'中文' s = '中文'.decode('utf -8') s = unicode('Chinese', 'utf-8') >>> type(u'Chinese')
>>>中文'u'u4e2du6587'>>>len(u'Chinois') 2
Conclusion
Découvrez si vous souhaitez pour traiter str ou unicode et utiliser la bonne méthode de traitement (str.decode/unicode .encode)Ce qui suit est une méthode pour déterminer s'il s'agit d'unicode/str>> > isinstance(u'中文', unicode) True >>> isinstance('Chinois', unicode) False >>> isinstance('Chinois', str) True >>> u'中文', str) False#s est le str s de code_A'.encode('code_B')
Traitement de fichiers, IDE et console
le flux de traitement peut être utilisé comme ça, pensez à python comme un Pool, une entrée, une sortie
A l'entrée, tout est converti en unicode, à la sortie, tout est converti en unicode, et à la sortie, c'est converti dans l'encodage cible (bien sûr, il y a des exceptions, l'encodage spécifique doit être utilisé dans la situation logique de traitement)
Lire les fichiers, encodage d'entrée externe, décoder en Unicode, traiter (encodage interne, Unicode unifié), encoder en encodage cible requis, écrire dans la sortie cible (fichier ou console)
IDE et contrôle La raison en est que lors de l'impression, l'encodage est incohérent avec le propre encodage de l'EDI, ce qui entraîne
Lors de la sortie, convertissez l'encodage en un encodage cohérent et la sortie peut être normale. 🎜>>>> imprimer u '中文'.encode('gbk') ???? >>> imprimer u'中文'.encode('utf-8') 中文
Il est recommandé de standardiser l'encodage
standardiser l'encodage
unifier l'encodage pour éviter les codes tronqués causés par un certain lien
Codage d'environnement, IDE/éditeur de texte, codage de fichiers, codage de table de base de données
Assurer le codage du fichier source du code
C'est très important
Le codage par défaut des fichiers py est ASCII Dans le fichier de code source, si des caractères non-ASCII sont utilisés, une déclaration de codage doit être. fait dans l'en-tête du fichier
S'il n'est pas déclaré, la saisie en non-ASCII entraînera. Les erreurs rencontrées doivent être placées sur la première ou la deuxième ligne du fichier Fichier "XXX.py" , ligne 3 SyntaxError : Caractère non-ASCII 'xd6' dans le fichier c.py à la ligne 3, mais aucun encodage déclaré voir http://www.php.cn/ pour plus de détailsMéthode de déclaration
# -*- coding: utf-8 -*- ou #coding=utf-8
Si l'en-tête déclare coding=utf-8, a = 'Chinese' c'est l'encodage est utf-8
Après avoir terminé les étapes ci-dessus, il vous suffit de faire attention à deux unicodes et à l'encodage que vous avez défini (généralement utilisez utf-8)
Ordre de traitement
1. Décoder tôt 2. Unicode partout 3. Encoder plus tard
Modules associés et certains méthodes
>>> import sys >>> ; reload(sys)
En python, encoder directement une certaine chaîne d'encodage dans une autre str d'encodage
'Obtention et définition de l'encodage par défaut du système' est lié à str.encode ici, mais je l'utilise rarement comme ça, principalement parce que cela me semble. compliqué et incontrôlable, ou il est plus facile d'entrer un décodage clair et de sortir un encodage clair Certains (vues personnelles)
>. ;>> importer chardet >>> f = open( 'test.txt','r') >>> résultat = chardet.detect(f.read()) >>> ; résultat {'confidence' : 0,99, 'encoding' : 'utf-8 '}
u chaîne vers la chaîne Unicode correspondante
>> > u'中' u'u4e2d' >>> ; s = 'u4e2d' >>> imprimer s.decode('unicode_escape') dans >>>
Ce qui précède est la collecte d'informations sur l'encodage Python traitement. Nous continuerons à ajouter des informations pertinentes à l'avenir. Merci pour votre soutien à ce site !
Pour plus d'articles sur l'encodage Python Processing-Str et Unicode, veuillez prêter attention au site Web PHP chinois !