web-dev-qa-db-fra.com

Exécution du script "unicode" Python à partir de Gedit vs Terminal

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:

enter image description here

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

4
zetah

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.

3
Fish Monitor