Affichage caractères accentués, 45612 ème édition, 45613 ème sous presse..

Le
Pierre Maurette
Bonjour,

Je veux pouvoir afficher quelques caractères accentués en console, sous
Linux et Windows (et MacOS, mais pas possible de tester), à partir d'un
unique fichier source. J'aimerais également rester en UTF-8 pour le
fichier source.
Jusqu'à maintenant je constatais une incohérence entre ce mes résultats
et ce que je lisais à droite et à gauche. Je laissais courir, et puis
ce matin je me suis énervé sur le problème.
J'ai voulu comprendre pourquoi:

#! /usr/bin/env python
# -*- coding: utf-8 -*-
import sys
print u"un bxe9bxe9, un bébé".encode(sys.stdout.encoding, 'replace')

me donnait sous XP:
un b?b?, un b?b?
(et ce que j'attendais sous Linux).

J'ai testé alors:

#! /usr/bin/env python
# -*- coding: utf-8 -*-
import sys
print sys.stdout.encoding
print sys.stdin.encoding
print u"un bxe9bxe9, un bébé".encode('US-ASCII', 'replace')
print u"un bxe9bxe9, un bébé".encode('iso8859-15', 'replace')
print u"un bxe9bxe9, un bébé".encode('iso8859-1', 'replace')
print u"un bxe9bxe9, un bébé".encode('latin-1', 'replace')
print u"un bxe9bxe9, un bébé".encode('cp850', 'replace')

qui me donnera:

US-ASCII
US-ASCII
un b?b?, un b?b?
un bébé, un bébé
un bébé, un bébé
un bébé, un bébé
un b'b', un b'b'

A partir du US-ASCII, je pressens une explication. Mon installation de
XP x64 date de Mathusalem, une préversion francisée ensuite par MUI.
J'ai testé le même code sur un Windows 2000, et j'obtiens ce que
j'attends:

cp850
cp850
un b?b?, un b?b?
un búbú, un búbú
un búbú, un búbú
un búbú, un búbú
un bébé, un bébé

et:

print u"un bxe9bxe9, un bébé".encode(sys.stdout.encoding, 'replace')
fonctionne, sys.stdout.encoding étant cp850.

En gros, sous 2000, la console est en cp850 et sys.stdout.encoding est
en cohérence. Sous *mon* XP, la console est en latin-1 (ou iso8859-15,
ou iso8859-1), mais sys.stdout.encoding me renvoie US-ASCII.

D'après vous est-ce bien un problème sur mon XP, ou un truc Python qui
m'échappe ?

--
Pierre Maurette
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Cémoi
Le #664916

<snip>

J'ai testé le même code sur un Windows 2000, et j'obtiens ce que j'attends:

cp850
cp850
un b?b?, un b?b?
un búbú, un búbú
un búbú, un búbú
un búbú, un búbú
un bébé, un bébé

J'obtiens la même chose que toi avec un XP SP2 tout ce qu'il y a de plus

standard, en version française bien sûr, testé dans une console cmd.exe
sous Python 2.5.1 (r251:54863, Apr 18 2007, 08:51:08) [MSC v.1310 32 bit
(Intel)]


D'après vous est-ce bien un problème sur mon XP, ou un truc Python qui
m'échappe ?


Si ça t'échappe, alors moi aussi. Désolé .... ;o)

My two cents.

Laurent




Pierre Maurette
Le #664915

<snip>

J'ai testé le même code sur un Windows 2000, et j'obtiens ce que j'attends:

cp850
cp850
un b?b?, un b?b?
un búbú, un búbú
un búbú, un búbú
un búbú, un búbú
un bébé, un bébé

J'obtiens la même chose que toi avec un XP SP2 tout ce qu'il y a de plus

standard, en version française bien sûr, testé dans une console cmd.exe
sous Python 2.5.1 (r251:54863, Apr 18 2007, 08:51:08) [MSC v.1310 32 bit
(Intel)]


Merci, et bravo d'avoir "traduit" ma demande. Je m'oriente donc vers
une c... une demi paire de génitoires dans mon XP...
Je vais soit laisser tomber - pas très gênant - soit voir sur
microsoft.public.fr.windowsxp s'il y a une solution simple.

--
Pierre Maurette


MC
Le #663630
Bonsoir !

Tu as oublié un élément : la police de caractères utilisée.
Sur la fenêtre de ta console, fais un clic-droit sur la barre de titre
; puis choisi "propriétés" ; onglet "police".

Attn, après un changement de police, il faut relancer ton script, sans
fermer la fenêtre.

--
@-salutations

Michel Claveau
Pierre Maurette
Le #663629
Bonsoir !

Tu as oublié un élément : la police de caractères utilisée.
Sur la fenêtre de ta console, fais un clic-droit sur la barre de titre ; puis
choisi "propriétés" ; onglet "police".

Attn, après un changement de police, il faut relancer ton script, sans fermer
la fenêtre.


Il est possible que ça puisse jouer sur des trucs "étranges". Mais je
ne m'intéresse qu'à "quelques caractères accentués".
Je pense que le point nodal de mon problème est le fait que
sys.stdout.encoding me renvoie US-ASCII, et que le "bon" charset est
latin-1, ou iso8859-15, ou iso8859-1.

--
Pierre Maurette

Bruno Piguet
Le #663627
[...]
Je pense que le point nodal de mon problème est le fait que
sys.stdout.encoding me renvoie US-ASCII, et que le "bon" charset est
latin-1, ou iso8859-15, ou iso8859-1.


Ou probablement cp1252, identique à iso8859-1 pour le "è", mais qui
utilise des choses entre x80 et x9F (interdit chez les ISO).
Si tu obtiens un ¤ en x80 et un ½ en x9C, c'est sûr, c'est du cp1252.

Bruno.

Méta-MCI \(MVP\)
Le #663626
Bonjour !

Il est possible que ça puisse jouer sur des trucs "étranges".


Naaaan ! ça "joue" beaucoup plus souvent que cela. Un simple essaie te
l'aurait confirmé.
Pour moi, la police joue pour des caractères tels que éèàôï ...

Sinon, pour les cas tordus/étranges, il faut savoir que Windows est, par
défaut, en cp850 ; mais si nécessaire, il bascule, à la volée, en UTF16.
Il y a un moyen simple de vérifier cela : créer un fichier avec un nom
comportant des caractères chinois, grecs ou cyrilliques. Ensuite, si on
tape DIR [Entrée], on voit tout correctement, alors que cp850 -seul-
n'est pas capable de gérer l'affichage, ce qui prouve le mode mixte.

@+

MCI

Publicité
Poster une réponse
Anonyme