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 :

Encodage avec Sqlite


Sujet :

Python

  1. #1
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut Encodage avec Sqlite
    Bonjour à tous,

    Je souhaite utiliser Sqlite pour stocker diverses infos de mon programme, infos rentrées par l'utilisateur.
    Dans certains cas, celui-ci peut entrer des caractères accentués.

    La sauvegarde dans Sqlite se fait correctement (en tout cas je n'ai pas de message d'erreur). Par contre lorsque je souhaite ré-interroger la BD là ça me met le message suivant:

    Traceback (most recent call last):
    File "C:\essai.py", line 703, in appel
    c.execute('select key from mytable')
    sqlite3.OperationalError: Could not decode to UTF-8 column 'key' with text '58 / Période'
    .

    Lorsque j'ai créé ma BD j'ai bien pris le soin d'indiquer que key serait de la forme TEXT.

    Voici un rapide aperçu de mon script python:

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    #-*- coding: utf-8 -*-
     
    import sqlite3
     
    def create():
        conn = sqlite3.connect("c:\mybdd.bd")
        conn.row_factory = sqlite3.Row   
        c = conn.cursor()
        c.execute('''create table mytable (key TEXT, dep TEXT, projet TEXT''')
        conn.commit()
        c.close()
     
    def Save():
        liste = [str(self.txt1.GetValue()), str(self.txt2.GetValue()), str(self.txt3.GetValue())]
        conn = sqlite3.connect("c:\mybdd.bd")
        conn.row_factory = sqlite3.Row   
        c = conn.cursor()
        c.execute("""insert into mytable values ('%s','%s','%s')"""%liste)
        conn.commit()
        c.close()
     
    def Read():
        conn = sqlite3.connect("c:\mybdd.bd")
        conn.row_factory = sqlite3.Row   
        c = conn.cursor()
        c.execute('''select * from mytable''')
        for row in c:
            print "%s, %s, %s" % (row[0], row[1], row[2])
            print '...'
        c.close()
    J'ai essayé des encode(), decode()... (un peu tout ce qui me passait par la tête d'ailleurs ^^), mais rien.
    Quelqu'un aurait il une idée pour que je puisse lire sans problème le contenu de ma BD même si celle-ci contient des caractères accentués, car là je bloque un peu?

    D'avance merci
    Initiation à Qt Quick et QML : Partie 1 - Partie 2
    En cas de besoin, pensez à la
    Mon site et mes tutoriaux sur Developpez.com
    Pas de question technique par MP... Les forums sont là pour ça

  2. #2
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Points : 1 658
    Points
    1 658
    Par défaut
    Salut,



    Je n’ai pas obtenu la reproduction de ton message d’erreur en exécutant ton code.
    Avec Python 3.1

    Pour l’exécuter, j’ai dû ajouter la parenthèse manquante dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    c.execute('''create table mytable (key TEXT, dep TEXT, projet TEXT''')


    Pour faire des essais de façon aisée j’ai aussi changé create() en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    def create():
        if os.access('c:\mybdd.bd',1 ):
            conn = sqlite3.connect("c:\mybdd.bd")
            conn.cursor().execute('DELETE FROM mytable')
            conn.commit()
        else:
            conn = sqlite3.connect("c:\mybdd.bd")
            conn = sqlite3.connect("c:\mybdd.bd")
            conn.row_factory = sqlite3.Row   
            c = conn.cursor()
            c.execute('create table mytable (key TEXT, dep TEXT, projet TEXT)')
            conn.commit()
            c.close()



    Pour obtenir une exécution correcte, je suis obligé de mettre un tuple après la référence liste.
    Si je mets une vraie liste, il y a l’erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        c.execute("""insert into mytable values ('%s','%s','%s')"""%liste)
    TypeError: not enough arguments for format string
    J’ai essayé aussi avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    c.execute("""insert into mytable values ('%s','%s','%s')"""%\
              [('naïade','héroïne ambiguë','dû'),('oiseau','mer','tartine'),('sel','pain','eau')])
    et j’obtiens la même erreur.







    Par contre avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    def Save():
        # liste = [str(self.txt1.GetValue()), str(self.txt2.GetValue()), str(self.txt3.GetValue())]
        liste = ('géomètrie','pêche melba inouïe','où est l’hameçon')
        conn = sqlite3.connect("c:\mybdd.bd")
        conn.row_factory = sqlite3.Row   
        c = conn.cursor()
        c.execute("""insert into mytable values ('%s','%s','%s')"""%liste)
        conn.commit()
        c.execute("""insert into mytable values ('%s','%s','%s')"""%\
                  ('héroïne ambiguë','naïade','dû'))
        conn.commit()
        c.close()
    j’obtiens
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    géomètrie, pêche melba inouïe, où est l’hameçon
    ...
    héroïne ambiguë, naïade, dû
    ...

    Pourrais tu indiquer quelles sont les valeurs des str(self.txt1.GetValue()) ?









    Une chose m’intrigue dans le message
    sqlite3.OperationalError: Could not decode to UTF-8 column 'key' with text '58 / Période'
    decode() : dans mon esprit. c’est de UTF-8, ou de UTF-1, ou de iso-8859-1, ou de csptcp154, etc vers Unicode.

    Mais pas VERS UTF-8, UTF-16 etc. (Could not decode to UTF-8 )






    Qu’est ce que '58 / Période' ?
    Est-ce la valeur dans la première ligne de la colonne key ?

    Est-ce que ton code marche correctement si tu enregistres des chaînes sans accents ? Question bête, mais bon... des fois...

    Ce qui est étonnant aussi, c’est que le message d’erreur est affiché avec un accent
    Could not decode to UTF-8 column 'key' with text '58 / Période'
    Il y a quelque chose qui n’arrive pas à décoder, et il y en a une autre qui n'arrive à l’afficher.

  3. #3
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut
    Tout d'abord merci pour ta réponse.

    Lorsque j'ai recopié mon code j'ai effectivement oublié ou mal recopié certaines choses...
    Citation Envoyé par eyquem Voir le message
    Pour l’exécuter, j’ai dû ajouter la parenthèse manquante dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    c.execute('''create table mytable (key TEXT, dep TEXT, projet TEXT''')
    Effectivement c'est mieux comme ça.

    Citation Envoyé par eyquem Voir le message
    Pour faire des essais de façon aisée j’ai aussi changé create() en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    def create():
        if os.access('c:\mybdd.bd',1 ):
            conn = sqlite3.connect("c:\mybdd.bd")
            conn.cursor().execute('DELETE FROM mytable')
            conn.commit()
        else:
            conn = sqlite3.connect("c:\mybdd.bd")
            conn = sqlite3.connect("c:\mybdd.bd")
            conn.row_factory = sqlite3.Row   
            c = conn.cursor()
            c.execute('create table mytable (key TEXT, dep TEXT, projet TEXT)')
            conn.commit()
            c.close()
    Pourquoi pas. Je (re)débute en Sqlite. Si ceci est plus propre je m'en inspirerai pour mon code définitif.
    Merci ^^.

    Citation Envoyé par eyquem Voir le message
    Pour obtenir une exécution correcte, je suis obligé de mettre un tuple après la référence liste.
    Si je mets une vraie liste, il y a l’erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        c.execute("""insert into mytable values ('%s','%s','%s')"""%liste)
    TypeError: not enough arguments for format string
    J’ai essayé aussi avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    c.execute("""insert into mytable values ('%s','%s','%s')"""%\
              [('naïade','héroïne ambiguë','dû'),('oiseau','mer','tartine'),('sel','pain','eau')])
    et j’obtiens la même erreur.
    C'est effectivement un tuple qu'il faut. En fait liste n'aurait pas du être une liste mais un tuple, car:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "%s, Je m'appelle %s et j'ai %ans" %("Bonjour", "Jiyuu", "28")
    Il s'agit bien d'un tuple. Autant pour moi.

    Citation Envoyé par eyquem Voir le message
    Par contre avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    def Save():
        # liste = [str(self.txt1.GetValue()), str(self.txt2.GetValue()), str(self.txt3.GetValue())]
        liste = ('géomètrie','pêche melba inouïe','où est l’hameçon')
        conn = sqlite3.connect("c:\mybdd.bd")
        conn.row_factory = sqlite3.Row   
        c = conn.cursor()
        c.execute("""insert into mytable values ('%s','%s','%s')"""%liste)
        conn.commit()
        c.execute("""insert into mytable values ('%s','%s','%s')"""%\
                  ('héroïne ambiguë','naïade','dû'))
        conn.commit()
        c.close()
    j’obtiens
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    géomètrie, pêche melba inouïe, où est l’hameçon
    ...
    héroïne ambiguë, naïade, dû
    ...
    Tu obtiens ceci avec la fonction read()?

    Citation Envoyé par eyquem Voir le message
    Pourrais tu indiquer quelles sont les valeurs des str(self.txt1.GetValue()) ?
    self.txt1, self.txt2 et self.txt3 sont des wx.TextCtrl. Leur valeurs peut donc contenir tout un tas de caractères.
    Lorsque je les enregistre dans ma BD, je les passe comme dans l'exemple que j'ai donné mais bel et bien avec un tuple et non une liste.

    Citation Envoyé par eyquem Voir le message
    Une chose m’intrigue dans le message
    decode() : dans mon esprit. c’est de UTF-8, ou de UTF-1, ou de iso-8859-1, ou de csptcp154, etc vers Unicode.

    Mais pas VERS UTF-8, UTF-16 etc. (Could not decode to UTF-8 )
    .
    J'ai revérifé. C'est bien ce message que j'ai. (Moi c'est l'encodage tout court qui m'intrigue ^^)

    Citation Envoyé par eyquem Voir le message
    Qu’est ce que '58 / Période' ?
    Est-ce la valeur dans la première ligne de la colonne key ?
    Exactement.
    En fait mon programme est un outil de gestion de projet. Dans la première colonne j'y mets "département / référence", ce qui me permet par la suite de rappeler le projet en le choisissant dans un wx.ComboBox.

    Citation Envoyé par eyquem Voir le message
    Est-ce que ton code marche correctement si tu enregistres des chaînes sans accents ? Question bête, mais bon... des fois...
    S'il y a bien une chose que j'ai appris c'est qu'il n'y a pas de question bête en programmation. Et oui mon code fonctionne à merveille si je ne mets pas d'accents.
    En théorie il n'y a qu'une seule zone où l'utilisateur risque de mettre des accents ou autres caractères spéciaux. J'ai essayé de passé un upper() avant d'enregistrer la chaine, mais cette fonction maintient l'accent malheureusement.

    Citation Envoyé par eyquem Voir le message
    Ce qui est étonnant aussi, c’est que le message d’erreur est affiché avec un accent

    Il y a quelque chose qui n’arrive pas à décoder, et il y en a une autre qui n'arrive à l’afficher.
    Une autre chose que j'ai appris avec la programmation, c'est que tout est étonnant ^^
    Initiation à Qt Quick et QML : Partie 1 - Partie 2
    En cas de besoin, pensez à la
    Mon site et mes tutoriaux sur Developpez.com
    Pas de question technique par MP... Les forums sont là pour ça

  4. #4
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Points : 1 658
    Points
    1 658
    Par défaut
    Il faudrait que tyrtamos apparaisse. Il s’y connait pas mal sur le sujet. Mais il s’est fait rare ces derniers temps.

    Alors je continue de creuser.





    En quelle version es tu , Jiyuu ?

    Parce qu’entre les versions 2 et 3 de Python, la gestion de l’Unicode s’est complétement inversée.

    Je suis en Python 3.1
    et je n’arrive pas à utiliser la version 2.6 (que j’ai installée aussi) avec IDLE.


    PS:

    J’ai la réponse: tu est en Python 2.x car tu écris print sans parenthèses. OK je regarde les docs Python 2.






    J’ai donné ce bout de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    def create():
        if os.access('c:\mybdd.bd',1 ):
            conn = sqlite3.connect("c:\mybdd.bd")
            conn.cursor().execute('DELETE FROM mytable')
            conn.commit()
        else:
            conn = sqlite3.connect("c:\mybdd.bd")
            conn.row_factory = sqlite3.Row   
            c = conn.cursor()
            c.execute('create table mytable (key TEXT, dep TEXT, projet TEXT)')
            conn.commit()
            c.close()
    non pas pour dire qu’il faut faire ainsi, mais si ça peut aider. Car sans ce processus de départ , j’étais obligé d’effacer à la main la BDD , après avoir eu une erreur stopant l’exécution, et avant de relancer le programme. Mais pas toujours; je n’y comprends pas grand chose en fait. Avec la vérification-effacement ci-dessus , je n’ai pas ce problème et je ne cherche pas plus loin.






    J’obtiens bien
    géomètrie, pêche melba inouïe, où est l’hameçon
    ...
    héroïne ambiguë, naïade, dû
    ...
    avec

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    #-*- coding: utf-8 -*-
     
    import sqlite3, os
     
    def create():
        if os.access('c:\mybdd.bd',1 ):
            conn = sqlite3.connect("c:\mybdd.bd")
            conn.cursor().execute('DELETE FROM mytable')
            conn.commit()
        else:
            conn = sqlite3.connect("c:\mybdd.bd")
            conn.row_factory = sqlite3.Row   
            c = conn.cursor()
            c.execute('create table mytable (key TEXT, dep TEXT, projet TEXT)')
            conn.commit()
            c.close()
     
    def Save():
        tu = ('géomètrie','pêche melba inouïe','où est l’hameçon')
        conn = sqlite3.connect("c:\mybdd.bd")
        conn.row_factory = sqlite3.Row   
        c = conn.cursor()
        c.execute("""insert into mytable values ('%s','%s','%s')"""%tu)
        c.execute("""insert into mytable values ('%s','%s','%s')"""%\
                  ('héroïne ambiguë','naïade','dû'))
        conn.commit()
        c.close()
     
    def Read():
        conn = sqlite3.connect("c:\mybdd.bd")
        conn.row_factory = sqlite3.Row   
        c = conn.cursor()
        c.execute('''select * from mytable''')
        for row in c:
            print ("%s, %s, %s\n..." % (row[0], row[1], row[2]))
        c.close()
     
    create()
    Save()
    Read()






    J’ai une idée: il faudrait comparer les bytes avant écriture et après lecture.
    Je vais chercher dans la doc comment examiner les bytes d’un objet.

  5. #5
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut
    Je travail avec la version 2.5.
    La version 2.6 buggué grave lors des création de .exe et je n'ai jamais passé le cap de la 3.

    Pour la partie effacement vérif, moi je fait un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    try:
        conn = sqlite3.connect("c:\mybdd.bd")
        conn.row_factory = sqlite3.Row   
        c = conn.cursor()
        c.execute('create table mytable (key TEXT, dep TEXT, projet TEXT)')
        conn.commit()
        c.close()
    except:pass
    C'est moche mais ça marche bien ^^


    EDIT:
    J'ai repris exactement ton code. Voici le message d'erreur que j'ai:
    UnicodeEncodeError: 'charmap' codec can't encode character u'\u2019' in position 39: character maps to <undefined>
    File "C:\Documents and Settings\Charlie\Bureau\Nouveau dossier\essay_bdd.py", line 37, in <module>
    Read()
    File "C:\Documents and Settings\Charlie\Bureau\Nouveau dossier\essay_bdd.py", line 32, in Read
    print ("%s, %s, %s\n..." % (row[0], row[1], row[2]))
    File "C:\Python25\Lib\encodings\cp850.py", line 12, in encode
    return codecs.charmap_encode(input,errors,encoding_map)
    Je vais essayer sous linux avec la VM pour voir. (j'ai pas trop envie de désinstaller 2.5 pour le moment^^)

    EDIT BIS:
    Bon et bien sous ubuntu en python 3.1 ça fonctionne nikel... Je sens que je vais devoir migrer moi ^^
    Initiation à Qt Quick et QML : Partie 1 - Partie 2
    En cas de besoin, pensez à la
    Mon site et mes tutoriaux sur Developpez.com
    Pas de question technique par MP... Les forums sont là pour ça

  6. #6
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    J'arrive peut-être trop tard, mais avec Python 2.6 et sqlite3, l'encodage me semble fonctionner selon l'utilisation de text_factory:

    1- sans text_factory:

    -> on écrit des chaines unicode
    -> on lit des chaines unicode

    2- avec text_factory:

    -> on écrit des chaines unicode ou utf-8
    -> on lit des chaines utf-8

    Voilà le code simplifié qui permet de montrer cela, selon qu'on commente ou non la ligne text_factory:

    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
    23
    24
    25
    26
    27
     
    import os
    import sqlite3
     
    if not os.path.exists('mabdd.bd'):
        cnx = sqlite3.connect('mabdd.bd')
        cur = cnx.cursor()
        cur.execute('''CREATE TABLE matable (col1 TEXT, col2 TEXT)''')
        cnx.commit()
        cur.close()
     
    cnx = sqlite3.connect("mabdd.bd")
    cnx.text_factory = str
    cur = cnx.cursor()
    enreg = (u"abcéèà", u"abcéèà".encode('utf-8'))
    cur.execute('''INSERT INTO matable VALUES (?, ?)''', enreg)
    cnx.commit()
    cur.close()
     
    cnx = sqlite3.connect("mabdd.bd")
    cnx.text_factory = str
    cur = cnx.cursor()
    cur.execute('''SELECT * FROM matable''')
    for row in cur:
        print "%s, %s" % (row[0], row[1])
        print type(row[0]), type(row[1])
    cur.close()
    Tyrtamos
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  7. #7
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Points : 6 789
    Points
    6 789
    Billets dans le blog
    15
    Par défaut
    Merci tyrtamos.

    Ta réponse m'a permis d'y voir un peu plis clair et surtout de trouver la piste à suivre pour résoudre mon dilemme.

    En fait si je rentre dans ma BD une chaine de caractères de la forme
    tout se passe bien.
    Si j'ai bien suivi ceci est de l'unicode.

    Par contre si je récupère les valeurs de wx.TextCtrl sous la forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    str(self.txt1.GetValue())
    je récupère de l'utf-8 dans mon cas.

    Il faut donc (je suppose) que je force le passage en unicode.

    Je n'ai pas eu le temps de tester car je suis parti sur d'autres choses, en particulier le passage en python3.1 qui à l'air de mieux gérer les problèmes de codage.
    Me reste pour ceci à m'assurer que toutes les biblio dont j'ai besoin existe sous python 3.1.

    Encore merci.

    ++

    Jiyuu
    Initiation à Qt Quick et QML : Partie 1 - Partie 2
    En cas de besoin, pensez à la
    Mon site et mes tutoriaux sur Developpez.com
    Pas de question technique par MP... Les forums sont là pour ça

Discussions similaires

  1. [Mail] Problème d'encodage avec phpmailer
    Par catmary dans le forum Langage
    Réponses: 8
    Dernier message: 29/06/2006, 10h56
  2. 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
  3. Pb encodage avec javascript et JSP
    Par marti dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 21/12/2005, 10h06
  4. Porblème d'encodage avec un EDI java sous Suse 9.3 pro
    Par HNT dans le forum Applications et environnements graphiques
    Réponses: 6
    Dernier message: 12/11/2005, 12h32
  5. Encodage avec XML
    Par ujoodha dans le forum Format d'échange (XML, JSON...)
    Réponses: 8
    Dernier message: 25/10/2005, 10h48

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