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 :

getEditText et objet'<class 'bytes'>'


Sujet :

Python

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 262
    Points : 93
    Points
    93
    Par défaut getEditText et objet'<class 'bytes'>'
    Bonjour à tous,

    Je sollicite votre aide car j'essaie en vain d'adapter pour qu'elle fonctionne en python 3. une fonction que j'ai empruntée ici: http://www.brunningonline.net/simon/...es/000664.html

    Voici mon essai:
    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
    def getEditText(hwnd):       
        result = []  
        bufferlength = struct.pack('i', 255) ###  <class 'bytes'>    
        ### "linecount" correspond au nombre de lignes contenu du widget concerné    
        linecount = win32gui.SendMessage(hwnd, win32con.EM_GETLINECOUNT, 0, 0)    
        for line in range(linecount):       
            var1=b"".ljust(253)  
            linetext = bufferlength + var1           
            linelength = win32gui.SendMessage(hwnd, win32con.EM_GETLINE, line, linetext)         
            result.append(linetext[:linelength])
     
            maLigne=linetext[:linelength].decode()
            for a in result:
                print('--- essai1',a)
                print('--- essai2',a.decode())
    et voici la sortie:
    -- essai1 b' \x00d\x00o\x00g\x00f\x00'
    --- essai2 NULdNULoNulgNULf et autres NUL du genre

    Pourquoi ce résultat alors que bien sûr le widget en question contient du texte?
    Je débute aussi bien avec struct.pack qu'avec les objects bytes
    aussi ne pas m'en vouloir si j'ai manqué quelque chose. D'avance merci pour vos lumières.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 262
    Points : 93
    Points
    93
    Par défaut
    Ok, j'ai en grande partie résolu mon problème:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    def getEditText(hwnd):       
        result = []  
        bufferlength = struct.pack('i', 255) ###  <class 'bytes'> 
        bufferlength=bufferlength.decode('latin-1') ###  il suffit ici de reconvertir en str
        linecount = win32gui.SendMessage(hwnd, win32con.EM_GETLINECOUNT, 0, 0)    
        for line in range(linecount):       
            var1="".ljust(253)  
            linetext = bufferlength + var1 
            linelength = win32gui.SendMessage(hwnd, win32con.EM_GETLINE, line, linetext)    
            result.append(linetext[:linelength])              
        return result
    nouvelle question pourtant...
    si
    bufferlength=bufferlength.decode('latin-1') fonctionne,
    bufferlength=bufferlength.decode('utf-8') ne fonctionne pas
    Autre chose, pour je travaille avec Scite et pour un fonctionnement idéal, j'ai dû choisir encodage 8 Bit et en 1er ligne de programme # -*- coding: latin-1*-.
    Ce que je ne comprend pas puisque Python 3 fonctionne (si j'ai bien compris) en Utf-8.
    Merci à qui voudra éclairer ma lanterne...

  3. #3
    Membre chevronné

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Points : 1 752
    Points
    1 752
    Par défaut
    As-tu essayé d'utiliser le binaire 2to3 qui est présent dans le dossier de Python 3 ?

  4. #4
    Membre chevronné

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Points : 1 752
    Points
    1 752
    Par défaut
    Citation Envoyé par Chris33 Voir le message
    nouvelle question pourtant...
    si
    bufferlength=bufferlength.decode('latin-1') fonctionne,
    bufferlength=bufferlength.decode('utf-8') ne fonctionne pas
    Pour les chaînes, je te conseille de lire Dive into Python 3 car il y a plein de changements de ce côté. Une fois ces changements connus, les choses se simplifient.

    Citation Envoyé par Chris33 Voir le message
    Autre chose, pour je travaille avec Scite et pour un fonctionnement idéal, j'ai dû choisir encodage 8 Bit et en 1er ligne de programme # -*- coding: latin-1*-.
    Ce que je ne comprend pas puisque Python 3 fonctionne (si j'ai bien compris) en Utf-8.
    Va falloir apporter des précisions...

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    262
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 262
    Points : 93
    Points
    93
    Par défaut
    Merci à rambc pour sa réponse.

    1/ J'ai n'avais pas encore repéré le lien Dive into Python 3 mais je vais m'y intéréssé. J'ai par contre étudié cette page http://www.rmi.net/~lutz/strings30.html.
    C'est pourquoi je ne comprend pas que
    .decode('latin-1') fonctionne et
    .decode('utf-8') ne fonctionne pas.

    2/ Concernant Scite dans le menu fichier, encodage me propose:
    . 8 Bit
    .UCS -2 gros-boutiste
    . UCS - 2 petit-boutiste
    . UTF-8
    .UTF-8 cookie\par

    Dans ma fonction ci-dessus j'obtiens un bon affichage avec
    . 8 Bit et en 1er ligne de script latin-1
    Par contre, si j'utilise:
    . 8 Bit et en 1er ligne de script lat UTF-8 ---> me donne une erreur (ce qui me semble normal puisque UTF-8 peut encoder sur plusieurs octets.)
    Quant à :
    . UTF-8 ou .UTF-8 cookie\par,
    latin-1 en 1er ligne ne fonctionne pas et si en 1er ligne toujours je met utf-8 le script fonctionne mais les lettres accentuées sont remplacées par des carrés.

    Ce n'est pas la 1er fois que je me penche sur ces problèmes de charset et d'encodage et j'aimerais bien comprendre un peu mieux.

Discussions similaires

  1. [VB.NET] Acceder a un objet de classe
    Par maxxou dans le forum Windows Forms
    Réponses: 11
    Dernier message: 25/09/2006, 18h19
  2. Supprimer un objet de classe dans visual basic
    Par Access Newbie dans le forum Access
    Réponses: 4
    Dernier message: 02/08/2006, 20h26
  3. creation d'objet de classe a partir de string
    Par mencaglia dans le forum C++
    Réponses: 1
    Dernier message: 14/03/2006, 09h56
  4. [JSP][STRUTS] Passer des objets à une classe action
    Par maphi dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 10/08/2005, 16h55
  5. [VB.NET] Instanciation objet (sur class perso.)
    Par DaxTaz dans le forum ASP.NET
    Réponses: 4
    Dernier message: 03/05/2004, 11h07

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