Python2.7 génère des caractères chinois tronqués dans la fenêtre de commande Windows

巴扎黑
Libérer: 2017-06-23 16:01:19
original
3234 Les gens l'ont consulté

L'exemple de cet article décrit le problème du code tronqué généré lors de l'exécution de fichiers Python sous la fenêtre de commande Windows Pour votre référence :
Ps : veuillez me corriger s'il y a des erreurs. Bienvenue pour échanger et apprendre

# -*- coding:utf-8 -*-str = "彦雪"print str
Copier après la connexion
Après l'exécution, les résultats de sortie sont les suivants :

褰﹂洩
Copier après la connexion
Les résultats du code tronqué peuvent être différents des autres, mais ils sont tous des codes tronqués !!

Analyse du problème

Le codage par défaut de Python2 est "ascii", et le codage ascii ne contient pas de caractères chinois

S'il contient des caractères chinois, le L'interpréteur Python signalera généralement une erreur.
Mais si l'encodage UTF-8 est spécifié, Python ne signalera plus d'erreur
"# -
- coding:utf-8 --" précise. que le code source Python est codé en UTF-8.

Le codage par défaut de window est le codage gbk, donc str doit être codé en gbk avant la sortie.

Puisque Python ne permet pas la conversion directe de utf-8 en gbk, vous devez d'abord convertir utf-8 en unicode, puis en gbk

Analyse approfondie

Cette méthode a un Un inconvénient est que des problèmes surgiront lorsque nous serons multiplateformes, donc Python nous fournit une solution pratique pour utiliser Unicode comme sortie - cette méthode ne s'applique pas à raw_input

lorsque l'impression est requise Lors de la sortie, Python appellera d'abord le format d'encodage du programme de sortie de caractères (ligne de commande ou fonction de sortie), puis encodera la chaîne dans l'encodage utilisé par le programme de sortie de caractères (afin que le programme de sortie de caractères n'apparaisse pas car il le fait ne reconnaît pas l'encodage) Caractères tronqués), puis le programme de sortie de caractères envoie les caractères codés vers la destination.

Solution

# 方法一  中文前加u, 告诉Python解释器后面的是个unicode编码str = u"彦雪"
Copier après la connexion
# 方法二  str.decode('utf-8') 以utf-8编码对字符串 str 进行解码, 获取unicodestr = "彦雪".decode('utf-8')
Copier après la connexion
# 方法三  unicode(str, 'utf-8') 将字符串 str 以utf-8编码解码, 获取unicodestr = unicode('彦雪','utf-8')
Copier après la connexion
s'affiche dans la fenêtre de commande Windows raw_input Caractères tronqués

L'utilisation de raw_input nécessite la conversion du chinois en codage système. La méthode est la suivante

# 方法1  str.encode("gbk") 将unicode转为gbk 编码content = raw_input(u"输入内容: ".encode("gbk"))
Copier après la connexion
# 方法2content = raw_input("输入内容: ".decode('utf-8').encode("gbk"))
Copier après la connexion
.
# 方法3content = raw_input(unicode('输入内容: ','utf-8').encode("gbk"))
Copier après la connexion

Bien que cette méthode d'écriture soit très pratique, l'effet multiplateforme est médiocre. Personnellement, je ne recommande pas cette méthode d'écriture. Il est recommandé d'écrire les caractères chinois et raw_input séparément. le but d'être sur la même ligne

Lecture étendue

Notes d'encodage Python# -

- codage:utf-8 --

PEP 263 - Définition des encodages de code source Python

Quelques recherches sur l'encodage Python, les caractères tronqués et Unicode

entrée raw_input, lecture de fichiers, comparaison de variables et autres problèmes de conversion str, unicode, utf-8

Exploration

Je suis actuellement résigné. En attendant, je vais partager avec vous les problèmes que j'ai souvent rencontrés auparavant et en discuter avec vous, j'espère que cela sera utile à tout le monde. Les corrections sont les bienvenues

Retrouvez-vous dans le partage de connaissances et profitez des joies de la programmation

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