IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Accents Command Line depuis un script Python


Sujet :

Python

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm� Avatar de nicou50
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    131
    D�tails du profil
    Informations personnelles :
    �ge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 131
    Par d�faut Accents Command Line depuis un script Python
    Comment faire pour afficher les accents au command line en appelant un script python. J'ai essay� d'utiliser le module locale (genre sellocale(LC_ALL,'cp1252')...mais �a ne marche plus.
    Je suis donc oblig� de marquer du code directement:
    ex:pour afficher Sp�ficification.odt, je dois faire print "Sp\202cification.odt", ce qui n'est pas pratique quand on a plein de messages d'erreurs. Est-ce qu'on peut m'aider?

  2. #2
    Expert confirm�
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activit� : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par d�faut
    ASCII est l'encodage par d�faut utilis� par python. Il est possible de d�finir l'encodage du code source en utilisant une ligne de commentaire sp�ciale plac�e en 1ere ou 2eme ligne du fichier source:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    L:1#! /usr/bin/env python
    L:2# -*- coding: <encoding name> -*-
    L:3
    L:4# ...suite du code ...
    L:5
    <encoding name> peut �tre utf-8 si ton �diteur est configurer pour g�n�rer un encodage utf-8 ou Latin-1 (qui est la version ASCII utilis�e pour reconnaitre les accents et autre sp�cificit�s de la langue fran�aise) si ton �diteur utilise un encodage du type ISO-8859-1 ou ISO-8859-15.

    Meilleures salutations

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  3. #3
    Membre confirm� Avatar de nicou50
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    131
    D�tails du profil
    Informations personnelles :
    �ge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 131
    Par d�faut Merci Thierry mais...
    Salut Thierry.
    j'utiliser d�j� la ligne -*- coding:cp1252 -*- dans mon script. Je vais essayer Latin-1 comme tu me dis, mais le probl�me vient du command line de windows.
    Lorsque je fais un print "���" dans mon �diteur, il l'affiche comme il faut.
    c'est lorsque j'appelle mon script depuis le terminal dos de windows que mon "���" n'est pas affich� correctement(caract�re nowhere). Seulement, il faudrait que je me d�clare � chaque fois une classe dans chacune de mes fonctions pour que cela fonctionne.
    Dis moi si tu trouve un moyen de comprendre ce .py et de le rendre plus simple... Merci

  4. #4
    Expert confirm�
    Avatar de Guigui_
    Homme Profil pro
    Ing�nieur d�veloppement logiciels
    Inscrit en
    Ao�t 2002
    Messages
    1 864
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 44
    Localisation : France, Sa�ne et Loire (Bourgogne)

    Informations professionnelles :
    Activit� : Ing�nieur d�veloppement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Ao�t 2002
    Messages : 1 864
    Par d�faut
    et si tu �cris
    ?, cela fonctionne (le u devant un string indique que ton string est un unicode

  5. #5
    Expert confirm�
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activit� : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par d�faut
    Salut,

    Le fond du probl�me est que Windows (ANSI) et Dos (OEM) n'utilisent pas la m�me table de caract�res. La table de caract�re Windows/ANSI (CP 1252) inclus pas mal de caract�res accentu�s qui n'existent pas dans OEM (CP 850).


    Solution n�1: The hard way


    Tu peux changer le code de la page (CP) en console avec la commande DOS (d�finit la table de caract�res utilis�s):

    Il est possible de changer le CP directement depuis ton code en utilisant une fonction de l'API Win32:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    from win32console import SetConsoleOutputCP
    SetConsoleOutputCP(1252)
    print "éééééééé"
    A ce stade, les caract�res ne s'affichent toujours pas correctement pour la raison suivante: seul le CP correspondant � la table de caract�re originale (OEM: Original Equipment Manufacturer) s'affiche correctement avec la police Raster (Raster Fonts) d�finie par d�faut en mode console (pour changer la police de la console: click bouton droite sur la console -> properties -> Font). Pour utiliser correctement CP 1252, il faut changer la police de la console et utiliser Lucida Console (TrueType Font). Voir les remarques � la page : http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/chcp.mspx . Je ne sais pas si l'API Win32 d�finit �galement une fonction te permettant de changer cette police directement depuis le code.

    Une fois la police de la console d�finie comme Lucida Console, le code ci-dessus s'ex�cute parfaitement au prix d'une fonction de l'API Win32 et un changement manuel de la police utilis�e par la console. C'est l'approche utilis�e lorsqu'on �crit un programme console en C ou en C++ (�galement possibilit� de conversion d'un caract�re Char ANSI vers OEM). BEAUCOUP TROP COMPLIQUE POUR MOI et PEU PORTABLE (m�me pas portable du tout)!

    Solution n�2: The Python/Unicode way

    La solution propos�e par Guigui_ fonctionne dans tous les cas de figure que j'ai test� sans avoir besoin de 1) changer la page de code de la console (CP) ni 2) modifier la police de la console (Raster Fonts par d�faut):

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
     
    # -*- coding: cp1252 -*-
    print u"éééééé"
    En plus, c'est portable, pas d'API Win32! A utiliser sans crainte et sans mod�ration.

    Meilleures salutations

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  6. #6
    Expert confirm�
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activit� : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par d�faut
    Dans le contexte de ce que j'ai d�crit plus haut, le module Printiso.py r�alise une conversion des caract�re vers la table de caract�re DOS/OEM CP850, permettant ainsi:

    1) d'�viter l'appel de win32console.SetConsoleOutputCP(1252)
    2) d'�viter de devoir changer la police par d�faut de la console (Raster Fonts) en Lucida Console (TrueType Font)

    Toutefois, l'utilisation de ce module n'est pas portable et je pr�f�re de loin la solution propos�e par l'utilisation d'une cha�nes de caract�re unicode (voir intervention de Guigui_ plus haut).

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    # -*- coding: utf-8 -*-
    print u"éééééé"
    s'ex�cute parfaitement sous Linux et dans une console DOS. Du moins, c'est le cas chez moi. A+ et bonne chance

    Pour te former : les Cours et tutoriels pour apprendre la programmation Python , en particulier celui la est g�nial : Apprendre � programmer avec Python 3 par G�rard Swinnen



    Meilleures salutations

    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  7. #7
    Membre �prouv�
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    Par d�faut
    Hello,

    Je relance ce thread, car ce probl�me m'agace.

    Il n'y a donc aucun moyen d'�viter de se trimbaler des pr�fixes (u) en mode UTF-8, et d'utiliser du Latin-1 ? C'est pourtant bien fait pour �a...

    Surtout que le u semble ne pas fonctionner dans une expression telle que


+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Lancer un script shell depuis un script python
    Par freestyler dans le forum G�n�ral Python
    R�ponses: 18
    Dernier message: 04/10/2011, 09h59
  2. comment re-sourcer mon .bashrc depuis un script python?
    Par Krishna dans le forum G�n�ral Python
    R�ponses: 1
    Dernier message: 02/10/2010, 20h40
  3. D�marrer command-line depuis VB.Net
    Par ovcrash dans le forum VB.NET
    R�ponses: 2
    Dernier message: 15/02/2010, 15h23
  4. Sauter vers le mode interactif depuis un script Python
    Par bahamut00 dans le forum G�n�ral Python
    R�ponses: 5
    Dernier message: 21/07/2006, 16h33
  5. lancer un .bat depuis un script python
    Par manu.c dans le forum G�n�ral Python
    R�ponses: 9
    Dernier message: 02/05/2006, 14h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo