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 :

Caractères - Unicode - différence de rendu PC Mac


Sujet :

Python

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 49
    Points : 45
    Points
    45
    Par défaut Caractères - Unicode - différence de rendu PC Mac
    Bonjour,
    Je suis un amateur et non un pro...
    Dans le cadre d'une petite appli en python et wxpython, j'avais un souci avec mes chaines contenant des accents (é, è, à etc...).
    J'ai vu sur un site qu'en indiquant le codage utf8, cela devrait régler le problème. Ce qui est le cas sur pc (où tout est impecc) mais sur mac, les caractères rendus sont différents de ceux attendus: é devient E accent grave, è devient E avec tremas...
    Pourquoi cette erreur et comment la rectifier.
    PJ un code test, effectué sur pc et mac avec python 2.5.1 et wxpython 2.8.4.0 version unicode pour python 2.5
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    #! /usr/bin/env python
    #-*- coding: utf-8 -*-
    import  wx
     
    #----------------------------------------------------------------------------
     
    class TestFrame(wx.Frame):
        def __init__(self, parent, title):
            wx.Frame.__init__(self, parent, title=title)
            wx.StaticText(self,-1,"éèà test")
    #----------------------------------------------------------------------------
                       (10, 10))
    class MyApp(wx.App):
        def OnInit(self):
            frame = TestFrame(None, title="Test unicode")
            frame.Show()
            return True
     
    #----------------------------------------------------------------------------
    if __name__ == '__main__':
        app = MyApp(0)
        app.MainLoop()
    Merci d'avance.
    Dominique

  2. #2
    Expert éminent sénior
    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 : 43
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Points : 10 067
    Points
    10 067
    Par défaut
    Essaie de rajouter un u devant ton string pour lui dire que c'est un chaine unicode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wx.StaticText(self, -1, u"éèà test")

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 49
    Points : 45
    Points
    45
    Par défaut
    Merci GuiGui,
    J'ai réessayé mais ça me déclenche une erreur:
    "UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 8: ordinal not in range(128)".

    Sinon et d'une façon générale, normalement, que faut-il faire quand on développe une appli avec python et wxpython unicode ?
    Mettre l'encoding en utf8 et ajouter un u devant chaque chaîne ?
    Laisser l'encoding en latin-1 ?

    Merci d'avance pour ces précisions
    Dominique

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 49
    Points : 45
    Points
    45
    Par défaut Bonnes pratiques
    Bonjour,
    On n'est jamais si bien servi que... Je me réponds en espérant que ça servira à des petits nouveaux...

    Je n'ai plus (pour l'instant du moins) de différence de rendu pc mac. Je ne saurais surement jamais pourquoi...

    Conclusion pour ceux qui auraient à gérer les accents:

    1/On code le fichier en iso8859-1 ou utf8 sur 1 des 2 premières lignes:
    # -*- coding: utf-8 -*-

    2/ On gère TOUTES les strings avec un u devant pour éviter les conflits:
    maStringUnicode=u" ceci est un test: éèàç"

    3/ Quand on a à utiliser des vraies strings non unicodes (par ex pour des "".join() ...), on prend la string unicode et on la recode en ascii:
    maStringAscii=maStringUnicode.encode('iso-8859-1')

    4/ On la remet en unicode avec:
    maStringUnicode=maStringAscii.decode('iso-8859-1')

    Voilà.
    Pas dur, mais quand on ne sait pas, ce n'est pas facile
    Petit exemple au cas où:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    # -*- coding: utf-8 -*-
     
    maStringUnicode=u'Ceci est un test: é è à ç § & '
    print maStringUnicode, type(maStringUnicode)
     
    maStringAscii=maStringUnicode.encode('iso-8859-1')
    print maStringAscii, type(maStringAscii)
     
    maStringUnicode=maStringAscii.decode('iso-8859-1')
    print maStringUnicode, type(maStringUnicode)
     
    # Si on a un int
    monInt=5
    print monInt,type(monInt)
    print 'Est-ce un int ? ',isinstance(monInt,int)
    monInt=str(monInt).decode('iso-8859-1')
    print 'Est-ce encore un int ? ',isinstance(monInt,int), '.C\'est un ',type(monInt)

    Dominique

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Différence de rendu .eps mac/windows
    Par supernovagm dans le forum Editeurs / Outils
    Réponses: 2
    Dernier message: 01/07/2013, 10h11
  2. [JDOM] caractère unicode de fin de ligne
    Par iceman dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 31/03/2009, 03h15
  3. Créer un caractère Unicode \uXXXX
    Par iubito dans le forum Général Java
    Réponses: 2
    Dernier message: 12/04/2006, 09h36
  4. Réponses: 4
    Dernier message: 14/10/2005, 09h15
  5. [CR8.5] caractères unicode
    Par Milou79 dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 03/09/2004, 11h42

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