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 :

erreur unicode


Sujet :

Python

  1. #1
    Membre averti
    Inscrit en
    Décembre 2003
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 28
    Par défaut erreur unicode
    Bonjour !

    voila, je debute avec python, et j'ai une erreur que je ne comprends pas...

    je recupere des information materielle avec WMI, et j'envoie ensuite ces données dans une base MySQL. Tout marche, sauf pour le clavier... :S

    quand je fais un print de ce que j'ai recuperé, j'ai ca :
    Clavier standard 101/102 touches ou clavier Microsoft Natural Keyboard PS/2
    Étendu (101 ou 102 touches)
    et voila ma requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    reqClavier ="insert into INFOPARC_clavier ("
    reqClavier = reqClavier +" clavier_description"
    reqClavier = reqClavier +" ,clavier_modele"
    reqClavier = reqClavier +" ,id_pc"
    reqClavier = reqClavier +" ) values ("
    reqClavier = reqClavier +" '"+str(clavier_description)+"'"
    reqClavier = reqClavier +" ,'"+str(clavier_modele)+"'"
    reqClavier = reqClavier +" ,'"+str(id)+"')"
    mais la, j'ai une erreur... :


    File "C:\client-serveur python\SupervisionParc.py", line 450, in Update c.execute(reqClavier)
    File "C:\Python24\Lib\site-packages\MySQLdb\cursors.py", line 137, in execute self.errorhandler(self, exc, value)
    File "C:\Python24\Lib\site-packages\MySQLdb\connections.py", line 33, in defaulterrorhandler raise errorclass, errorvalue
    UnicodeEncodeError: 'ascii' codec can't encode character u'\xc9' in position 165 : ordinal not in range(128)
    je pense que c'est parce qu'il y a un accent a "Étendu", mais comment faire pour qu'il le prenne.... ?

    j'ai essaye d'enlever le str(), mais ca fait pareil...

    merci d'avance !

  2. #2
    Membre averti
    Inscrit en
    Décembre 2003
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 28
    Par défaut
    je ne pense pas que ce soit la ligne 165 qui soit visée par ce message car, a la ligne 165 j'ai ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cpt_confreseau = cpt_confreseau + 1
    qui fonctionne tres bien, et meme en mettant une autre ligne, en sautant des lignes, en inversant tout ce que tu veux, c'est toujours "position 165" donc voila ^^.

    c'est surtout cette ligne la qui pose probleme :
    File "C:\client-serveur python\SupervisionParc.py", line 450, in Update c.execute(reqClavier)
    c'est a dire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    c.execute(reqClavier)
    donc c'est bien ma requete qui merde... les infos sont en "unicode", et moi je voudrais les passer en utf8 ou autre, pour qu'elles puissent etre inserées dans ma base... mais c'est la que j'arrive pas.

    j'ai utilise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    clavier_modele.encode("utf8","replace")
    mais rien n'y fait... :S merci de m'aider ^^

  3. #3
    Membre confirmé
    Avatar de Miksimus
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 100
    Par défaut hi han
    Ok, autant pour moi, je dis des âneries parfois
    ta requête, c'est donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into INFOPARC_clavier ( clavier_description ,clavier_modele ,id_pc ) values ( '"+str(clavier_description)+"' ,'"+str(clavier_modele)+"' ,'"+str(id)+"')
    Enfin là ça paraît un peu brouillon comme je l'ai écrit mais bon.

    Pourquoi n'essayerais-tu pas d'écrire ta requête de cette façon:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    reqClavier = "insert into INFOPARC_clavier ( clavier_description ,clavier_modele ,id_pc ) VALUES ('%s', '%s', '%s');" % (clavier_description, clavier_modele, id)
    C'est vrai que ça ressemble pas mal à ta requête mais bon, ça vient peut-être de là...

    Citation Envoyé par mickael99
    donc c'est bien ma requete qui merde... les infos sont en "unicode", et moi je voudrais les passer en utf8 ou autre, pour qu'elles puissent etre inserées dans ma base... mais c'est la que j'arrive pas.
    N'y a-til aucune informations s'y référant sur le site officiel de python (http://www.python.org) ?


  4. #4
    Membre averti
    Inscrit en
    Décembre 2003
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 28
    Par défaut
    merci Miksimus pour ton aide ^^, mais....

    j'ai essayé avec ta requete et j'ai la meme erreur.

    le seul truc que j'ai trouve pour essaye de changer l'encodage, c'est encode(), mais ca ne marche pas, je ne sais meme pas si c'est ca qu'il faut utiliser.... est que quelqu'un d'autre aurait une idée ??

  5. #5
    Membre confirmé
    Avatar de Miksimus
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 100
    Par défaut sangsue
    Désolé, c'est encore moi qui réponds... (tu dois me trouver lourd... )

    Tout d'abord, il faut savoir que Python utilise UTF-8 comme encodage par défaut.
    Bon essaye ceci, ça à l'air pas mal:
    si je veux convertir le mot élève en UFT-8 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> u"élève".encode('UTF-8')
    '\xc3\xa9l\xc3\xa8ve'

  6. #6
    Membre averti
    Inscrit en
    Décembre 2003
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 28
    Par défaut
    merci encore a toi de te prendre la tete avec moi, mais ca marche toujours pas...

    je n'ai vraiment plus aucune idée... en plus tu me dit que python prend par defau l'UTF-8, alors pourquoi j'ai de l'unicode ? j'ai pas developper le programme a la base, j'ai juste quelques modif a faire... ou est ce que je pourrais voir si on a changer les parametres par defaut ou un truc du genre ?
    parce que je risque d'avoir souvent des contenus ou il y aura des accents etc... donc si je pouvais eviter de mettre un "encode" (qui marche pas ^^) devant chaque variable ca serait bien ^^.


    ca doit pourtant pas etre compliqué, y a que toi sur ce forum ?? ^^

    bon je continu de chercher, merci encore ^^.

  7. #7
    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
    Moi, l'unicode, ca me lourde (alors j'évite autant que je peux)
    t'as fait une recherche sur le forum sur "unicode" (y'a quelques sujets qui pourraient peut-être t'être utile)
    les cours python : http://python.developpez.com/cours/ donne des explications sur l'unicode
    Le problème ne pourrait-il pas venir de mysqldb qui n'accepte pas l'unicode ?
    Moi, j'avais un problème "similaire" (enfin pas sûr) avec la librairie win32com pour utiliser excel avec lequel j'avais des cases où y'avait des "é", "à"... En furetant dans les sources, j'ai vu qu'il ne gérait pas l'unicode (en les modifiant un peu, après ca marchait)

  8. #8
    Membre averti
    Inscrit en
    Décembre 2003
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 28
    Par défaut
    merci pour les liens, je vais allez voir ca.

    Moi, l'unicode, ca me lourde (alors j'évite autant que je peux)
    moi aussi, et ma question est : comment je peux m'en passer dans mon cas ? le contenu de "clavier-modele" est le resultat d'une requete, est ce que le format est imposé par celle ci ??

    ma requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    colItems = self.objSWbemServices.ExecQuery("Select * from Win32_Keyboard")
    		for objItem in colItems:
    			clavier_description = objItem.Description
    			clavier_modele = objItem.Name
    [edit]je pourrais voir ca ou ? dans quel source ? excuse moi mais je debute vraiment avec Python... :S

  9. #9
    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
    par exemple dans mon cas, j'ai fait ce test

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    import win32com.client 
    MaFeuille = win32com.client.Dispatch('Excel.Application') 
    MaFeuille.Workbooks.open('C:\\b.xls') ## dans le fichier b.xls, j'ai mis un é dans la première case
     
    print MaFeuille.ActiveSheet.Cells(1,1).Value  ##fonctionne
    print str('é') ## fonctionne même s'il ne m'affiche pas ce que je veux
    print str(MaFeuille.ActiveSheet.Cells(1,1).Value)  ## plante parce qu'utilise le __str__
                                    ## d'un des fichiers de la librairie qui ne gère pas l'unicode
    avec le résultat suivant:
    é
    Ú
    Traceback (most recent call last):
    File "C:\b.py", line 7, in ?
    print str(MaFeuille.ActiveSheet.Cells(1,1).Value) UnicodeEncodeError: 'ascii' codec can't encode character u'\xe9' in position 0:
    ordinal not in range(128)
    après, j'ai recherché la fonction __str__ dans tous les fichiers et j'ai modifié le source (par contre, ça restait une rustine)
    Mais je sais pas trop si ça peut s'appliquer à ton cas

  10. #10
    Membre averti
    Inscrit en
    Décembre 2003
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 28
    Par défaut
    bon, probleme toujours pas reglé...


    je sais plus quoi faire moi... est ce que quelqu'un aurait une idée ?

    savoir pourquoi ce que je recupere est en unicode ? (alors qu'a ce qu'il parait python prend en utf8 par defaut)
    et comment je pourrais y remedier ?

    merci d'avance ^^.

  11. #11
    Membre éprouvé

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 121
    Par défaut
    As-tu essayer de creer le fichier C:\Python23\Lib\site-packages\sitecustomize.py et d'y ecrire dedans :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    import sys
    sys.setdefaultencoding('latin-1')

  12. #12
    Membre averti
    Inscrit en
    Décembre 2003
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 28
    Par défaut
    Merci ! ca marche !! t'es un chef ^^.

    allez, je te paye un

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

Discussions similaires

  1. [V6] Erreur Unicode
    Par LSDev_Noumea dans le forum Odoo (ex-OpenERP)
    Réponses: 1
    Dernier message: 22/09/2014, 23h25
  2. Erreur unicode \u8:
    Par Ca-Nul-Art dans le forum Débuter
    Réponses: 9
    Dernier message: 21/11/2013, 16h51
  3. Erreur unicode / ASCII
    Par hannibal.76 dans le forum Général Python
    Réponses: 2
    Dernier message: 03/12/2012, 16h23
  4. SSIS unicode erreur
    Par Maitre B dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 07/03/2007, 16h57
  5. [MFC]Unicode en visual c++ 7.0 erreur linkage
    Par kinhelios dans le forum Visual C++
    Réponses: 1
    Dernier message: 10/01/2007, 15h13

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