Comme on peut le voir sur la capture d'écran, le même script exécuté depuis Terminal et Gedit se comporte différemment - dans le script terminal, il s'exécute avec succès et génère dans Gedit une erreur:
Mais si je remplace python
dans le gestionnaire d’outils Gedit par PYTHONIOENCODING=utf-8 python
, le script s’exécutera également à partir de Gedit.
Pourquoi est-ce et quel paramètre de Terminal permet au code python "unicode" de s'exécuter sans problème?
Juste pour mettre à jour lorsque j'ai ajouté une prime: Ce n'est pas seulement GEdit, mais l'erreur est également générée dans SciTE, mais pas dans Geany car Geany exécute les scripts Python via le terminal
Terminal permet au code python "unicode" de s'exécuter sans problème, car le code sys.stdout.encoding
est correctement défini.
Je change le script comme ci-dessous:
#! /usr/bin/env python
# -*- coding: utf-8 -*-
import sys
print sys.stdout.encoding
print u"富强"
Exécutée dans Gedit, la sortie est: None
pour sys.stdout.encoding
.
Run in Terminal, la sortie est UTF-8
pour sys.stdout.encoding
et la chaîne est correctement imprimée.
Mais si je change les paramètres régionaux LC_CTYPE
de en_US.UTF-8
en C
, exécutez-le dans Terminal avec LC_CTYPE=C ./test.py
, je reçois le résultat suivant:
ANSI_X3.4-1968
Traceback (most recent call last):
File "./test.py", line 7, in <module>
print u"富强"
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
sys.stdout.encoding
est défini sur ASCII, de sorte qu'il ne peut pas gérer la chaîne.