Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

d

5 réponses
Avatar
Herve Autret
Bonjour,

J'utilise des fichiers sources Python qui ont été générés automatiquement
et ne comportent en général pas de ligne " -*- coding: ... -*- pour
définir l'encodage utilisé. C'est en effet facultatif lorsque les
commentaires sont écrits en anglais, ainsi qu'il est recommandé.
Cependant lorsque quelqu'un se laisse aller à commenter en français, cela
pose des problèmes par la suite à l'exécution.

Y a-t-il un moyen pour Python de connaître l'encodage utilisé par le
système sur lequel il s'exécute, afin de générer automatiquement le
coding: qui va bien ?

à +
--
Hervé

5 réponses

Avatar
Alain Ketterlin
Herve Autret writes:

J'utilise des fichiers sources Python qui ont été génà ©rés automatiquement
et ne comportent en général pas de ligne " -*- coding: ... -*- pour
définir l'encodage utilisé. C'est en effet facultatif lorsque l es
commentaires sont écrits en anglais, ainsi qu'il est recommandé .
Cependant lorsque quelqu'un se laisse aller à commenter en franà §ais, cela
pose des problèmes par la suite à l'exécution.

Y a-t-il un moyen pour Python de connaître l'encodage utilisé p ar le
système sur lequel il s'exécute, afin de générer auto matiquement le
coding: qui va bien ?



A mon avis ce n'est pas possible autrement que par la déclaration
explicite. Pour python 2.7 :

http://docs.python.org/reference/lexical_analysis.html
http://docs.python.org/reference/lexical_analysis.html#encoding-declarations

Pour python 3.2 :

http://docs.python.org/py3k/reference/lexical_analysis.html#encoding-declar ations

-- Alain.
Avatar
Nicolas
Le 06/09/2012 15:44, Herve Autret a écrit :
Bonjour,

J'utilise des fichiers sources Python qui ont été générés automatiquement
et ne comportent en général pas de ligne " -*- coding: ... -*- pour
définir l'encodage utilisé. C'est en effet facultatif lorsque les
commentaires sont écrits en anglais, ainsi qu'il est recommandé.
Cependant lorsque quelqu'un se laisse aller à commenter en français, cela
pose des problèmes par la suite à l'exécution.

Y a-t-il un moyen pour Python de connaître l'encodage utilisé par le
système sur lequel il s'exécute, afin de générer automatiquement le
coding: qui va bien ?

à +



L'encodage utilisé par le système ne veut pas dire grand chose.
Sous WinXP, sys.stdout.encoding donne CP850 dans une "fenêtre DOS" et
UTF-8 dans Eclipse. Le "système" est le même mais l’environnement
d'exécution ne l'est pas.
Ce qui veut dire que si je crée les fichiers à l'aide d'un script
exécuté sous Eclipse et que je relis ce fichier à l'aide d'un script
exécuté en ligne de commande, je n'aurais pas le même encodage par
défaut. Et je n'ai aucun moyen de retrouver l'encodage utilisé à la
création du fichier.

Si possible, il serait préférable de mettre l'encodage à la création du
fichier. Forcer l'utilisation d'UTF-8 ne serait pas idiot.

Nicolas
Avatar
Herve Autret
Bonjour,

Nicolas wrote:

Le "système" est le même mais l'environnement d'exécution ne l'est pas.



Ok.

Ce qui veut dire que si je crée les fichiers à l'aide d'un script
exécuté sous Eclipse et que je relis ce fichier à l'aide d'un script
exécuté en ligne de commande, je n'aurais pas le même encodage par
défaut. Et je n'ai aucun moyen de retrouver l'encodage utilisé à la
création du fichier.



Toutafé.

Si possible, il serait préférable de mettre l'encodage à la création du
fichier.



C'est ce que je voulais dire, et je l'ai mal dit. Je cherchais
quelquechose du genre sys.stdout.encoding (merci) qui permette de
reconnaître l'encodage utilisé dans l'environnement où s'exécute Python,
afin de le spécifier dans les fichiers créés. Le logiciel qui les crée
est multiplateforme Linux-Mac-Windows grâce à Python, et si chaque
fichier spécifie correctement son encodage, on va éliminer les erreurs
d'exécution (le point le plus important) et également, en principe, les
problèmes affichage dans les environnements où il sera transmis.

Ensuite, chacun des fichiers est susceptible d'être édité sur une autre
plateforme que celle où il a été créé, puis d'être retransmis à la
première. Le problème d'affichage peut ressurgir si les entrées clavier
sont enregistrés verbatim dans le fichier.

Forcer l'utilisation d'UTF-8 ne serait pas idiot.



Vu comme ça, maintenant... Le problème reste, pour moi : comment forcer
le transcodage des entrées lues depuis le clavier (ou depuis d'autres
fichiers où l'encodage est correctement renseigné) vers l'UTF-8 ? Auriez-
vous un lien ?
--
Hervé
Avatar
Nicolas
Forcer l'utilisation d'UTF-8 ne serait pas idiot.



Vu comme ça, maintenant... Le problème reste, pour moi : comment forcer
le transcodage des entrées lues depuis le clavier (ou depuis d'autres
fichiers où l'encodage est correctement renseigné) vers l'UTF-8 ? Auriez-
vous un lien ?



Il faut commencer par décoder le texte avec txt.decode().
Ensuite, il faut l'encoder dans le nouvel encodage avec txt.encode().
Donc, pour du texte qui vient du clavier :
in_enc = sys.stdin.encoding
txt_in = raw_input()
txt_out = txt_in.decode(in_enc).encode("utf-8")

txt_out est le texte tapé au clavier encodé en utf-8.

Nicolas
Avatar
Herve Autret
Bonjour,

Nicolas a écrit:

comment forcer le transcodage des entrées lues depuis le clavier
(ou depuis d'autres fichiers où l'encodage est correctement
renseigné) vers l'UTF-8 ? []



Il faut commencer par décoder le texte avec txt.decode(). Ensuite, il
faut l'encoder dans le nouvel encodage avec txt.encode(). Donc, pour du
texte qui vient du clavier : in_enc = sys.stdin.encoding
txt_in = raw_input()
txt_out = txt_in.decode(in_enc).encode("utf-8")

txt_out est le texte tapé au clavier encodé en utf-8.



Merci beaucoup. Je m'y colle dès que possible.
--
Hervé