OVH Cloud OVH Cloud

Encore les encodages (avec la console windows)

4 réponses
Avatar
Michel Claveau - abstraction méta-galactique non triviale en fuite perpétuelle.
Bonsoir !

Je viens encore vous embêter, avec mes expériences farfelues.


Avec le script suivant :

# -*- coding: utf-8 -*-

a="azérty "
print a



J'ai fait des essais, avec trois modes de la console windows. Résultats :


1) Console par défaut (cp850) : ça marche, mais les caractères affichés ne
sont pas bons.


2) Console en cp1252 : ça marche, mais les caractères affichés ne sont pas
bons.


3) Console en cp65001 (utf-8) : j'ai ça :
azérty Traceback (most recent call last):
File "D:\dev\Python\i6.py", line 4, in ?
print a
IOError: [Errno 2] No such file or directory

Donc, à priori, l'affichage est bon, mais Python ne ferme pas correctement
les IO.

Ce dernier mode étant prometteur, j'ai essayé une variante :
# -*- coding: utf-8 -*-

a=u"azérty "
print a

Et, là, j'obtiens :
Traceback (most recent call last):
File "D:\dev\Python\i6.py", line 4, in ?
print a
LookupError: unknown encoding: cp65001

Ce qui tendrait à prouver que "print" n'envoie pas de l'utf-8


Savez comment on peut utiliser "codecs", pour faire un "print en utf-8" ?



Merci d'avance.
--
Michel Claveau

4 réponses

Avatar
Amand Tihon
Michel Claveau - abstraction méta-galactique non triviale en fuite
perpétuelle. wrote:

Avec le script suivant :

# -*- coding: utf-8 -*-

a="azérty "
print a


Juste une question, pour clarifier (même si je ne serai probablement pas
capable de te répondre, ça peut toujours aider d'autres plus compé tents) :
Es-tu sûr que l'encodage spécifié correspond bien à l'encodage de ton
script ?
En d'autres mots, le fichier est-il bien en utf-8, comme le dit la lign e
# -*- coding ... -*- ?


--
Amand Tihon

Avatar
Michel Claveau - abstraction méta-galactique non triviale en fuite perpétuelle.
Bonsoir !


Oui, oui. Depuis le conseil de Wilk, je vérifie bien cela.

Par contre, je ne suis pas sûr que beaucoup de monde ait essayé la commande
MODE CON: CP SELECTe001
qui permet, en théorie, d'avoir une console windows en utf-8 ; théorie
vérifiée, si l'on fait un DIR, avec un répertoire contenant des fichiers
nommés en unicode.


Bonne nuit
--
Michel Claveau
Avatar
Gilles Lenfant
Michel Claveau - abstraction méta-galactique non triviale en fuite
Bonsoir !

Je viens encore vous embêter, avec mes expériences farfelues.


Avec le script suivant :

# -*- coding: utf-8 -*-

a="azérty "
print a



J'ai fait des essais, avec trois modes de la console windows. Résultats :


1) Console par défaut (cp850) : ça marche, mais les caractères affichés ne
sont pas bons.


2) Console en cp1252 : ça marche, mais les caractères affichés ne sont pas
bons.


3) Console en cp65001 (utf-8) : j'ai ça :
azérty Traceback (most recent call last):
File "D:devPythoni6.py", line 4, in ?
print a
IOError: [Errno 2] No such file or directory

Donc, à priori, l'affichage est bon, mais Python ne ferme pas correctement
les IO.

Ce dernier mode étant prometteur, j'ai essayé une variante :
# -*- coding: utf-8 -*-

a=u"azérty "
print a

Et, là, j'obtiens :
Traceback (most recent call last):
File "D:devPythoni6.py", line 4, in ?
print a
LookupError: unknown encoding: cp65001

Ce qui tendrait à prouver que "print" n'envoie pas de l'utf-8


Salut,

from encodings.aliases import aliases
aliases.has_key('cp65001')
False








Peut-être (non testé) en patchant le dico des aliases en plaçant la clé :
{...
'cp65001': 'utf_8',
...}

Bonne chance...




Savez comment on peut utiliser "codecs", pour faire un "print en utf-8" ?



Merci d'avance.




Avatar
Michel Claveau - abstraction méta-galactique non triviale en fuite perpétuelle.
Re !


Pour "détourner" le print par un traitement avec codecs (pour faire du print
en utf-8, par exemple), il faut faire :


import sys,codecs
sys.output=codecs.lookup('utf-8')[-1](sys.stdout)


(trouvé dans "Python Cookbook")



Bonne journée
--
Michel Claveau