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 :

Python - SQL problème d'encodage


Sujet :

Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juin 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juin 2014
    Messages : 21
    Points : 14
    Points
    14
    Par défaut Python - SQL problème d'encodage
    Bonjour,

    J'ai réalisé un script python qui requête une base de données type sql-server. Une fois la requête exécutée, je souhaite écrire un fichier xml avec le résultat. J'utilise python 2.7, avec mssql et lxml. Mon problème est que lorsque le fichier xml est écrit, les accents ne passent pas.

    J'ai bien spécifié "# coding: utf-8" en haut de mon script python. De plus, si j'encode le résultat de ma requête sql en utf8 ( row[0].encode('utf-8')), lxml me renvoie une erreur type :

    "ValueError: All strings must be XML compatible: Unicode or ASCII, no NULL bytes or control characters"

    Je m'en remets donc à vous, communauté de developpez.com

    Merci d'avance

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par cocs78 Voir le message
    Je m'en remets donc à vous, communauté de developpez.com
    Il faut séparer les différents problèmes... et pour cela, commencer par essayer d'écrire/lire un fichier XML avec des caractères non-ASCII pour voir comment çà fonctionne avec LXML. Et éventuellement permettre de poster un peu de code illustrant le soucis rencontré.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juin 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juin 2014
    Messages : 21
    Points : 14
    Points
    14
    Par défaut
    Merci de votre réponse.

    Effectivement je ne dois pas utilisé correctement lxml car je n'arrive pas à écrire un simple "é" dans le fichier.

    Ma variable contient la bonne information, l'erreur vient de l'écriture ...

    Comment faire ?

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par cocs78 Voir le message
    Effectivement je ne dois pas utilisé correctement lxml car je n'arrive pas à écrire un simple "é" dans le fichier.

    Ma variable contient la bonne information, l'erreur vient de l'écriture ...
    Si vous ne postez pas de code montrant comment vous (voulez) utilisez(r) lxml, je ne vais pas l'inventer.
    note: lxml n'a d'intérêt côté validation ou modification d'un document, la plupart du temps écrire directement le fichier texte suffit largement.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre à l'essai
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juin 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juin 2014
    Messages : 21
    Points : 14
    Points
    14
    Par défaut
    Rien de bien intéréssant dans le code si ce n'est ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    from lxml import etree
     
    interDec = etree.Element("intervention_declaree")
    obs = etree.SubElement(interDec,"observation")
    obs.text = "é"

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par cocs78 Voir le message
    Rien de bien intéréssant dans le code si ce n'est ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    from lxml import etree
     
    interDec = etree.Element("intervention_declaree")
    obs = etree.SubElement(interDec,"observation")
    obs.text = "é"
    Relisez le message d'erreur: "ValueError: All strings must be XML compatible: Unicode or ASCII, no NULL bytes or control characters".
    Est-ce que "é" est de l'ASCII ou de l'Unicode?
    Par défaut, sur Python2.7, ce n'est ni l'un, ni l'autre.

    Ecrire:
    serait bien mieux...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Membre à l'essai
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juin 2014
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juin 2014
    Messages : 21
    Points : 14
    Points
    14
    Par défaut
    Désolé, cela semblait simple mais je suis complètement passé au travers je ne sais pas pourquoi

    Du coup pour une variable lxml met à disposition un paramètre d'encodage dans sa fonction tostring()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    print etree.tostring(interDec, pretty_print=True, encoding='unicode')
    Merci beaucoup, pour cette solution.

Discussions similaires

  1. Réponses: 1
    Dernier message: 05/11/2014, 17h00
  2. Python + Apache : problème d'encodage UTF8 [résolu]
    Par CetTer dans le forum Général Python
    Réponses: 5
    Dernier message: 16/12/2013, 21h53
  3. Problème d'encodage de fichier (.csv-->.sql, .sql-->.csv)
    Par croustibapt dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 09/07/2009, 10h17
  4. [SQL] Problème d'encodage : les caractères accentués, sont affichés en "?"
    Par arnaudperfect dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 12/10/2007, 14h57
  5. Problème d'encodage avec Python
    Par tse_tilky_moje_imja dans le forum Général Python
    Réponses: 2
    Dernier message: 22/02/2006, 14h36

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