Problème accents entre Mysql et VB

Signaler
Messages postés
6
Date d'inscription
lundi 22 septembre 2008
Statut
Membre
Dernière intervention
16 octobre 2008
-
Messages postés
25
Date d'inscription
vendredi 15 septembre 2006
Statut
Membre
Dernière intervention
26 mai 2009
-
Bonjour,
J'ai une base de données MySQL utilisant l'encoding latin1 :
CREATE DATABASE xxxxxx DEFAULT CHARACTER SET latin1;
Lorsque j'interroge cette base de données dans VB, il me remplace les accents par d'autres caractères.
Je ne sais pas quel encoding est utilisé par défaut par VB et je n'arrive pas non plus à convertir mes données récupérées pour afficher les accents correctement.
Si quelqu'un à une idée, elle est la bienvenue.
Par avance merci pour votre aide

5 réponses

Messages postés
3275
Date d'inscription
jeudi 3 avril 2008
Statut
Membre
Dernière intervention
14 septembre 2014
4
regarde si tu as la possibilité de définir
CHARACTER SET =ANSI

Bonjour chez vous !
Messages postés
6
Date d'inscription
lundi 22 septembre 2008
Statut
Membre
Dernière intervention
16 octobre 2008

Merci pour ton aide. Mais je n'ai pas la possibilité de le faire
Pour info j'utilise ce type de connexion



MySQL_Conn.ConnectionString =




"DRIVER={MySQL ODBC 3.51 Driver};"

_

&




"SERVER=xxxx;"

_

&




"DATABASE=xxxxx;"

_

&




"UID=xxxx;"

_

&





"OPTION=3"
et ce que ca ne pourrait pas venir du driver : MySQL ODBC 3.51 Driver ?
Messages postés
25
Date d'inscription
vendredi 15 septembre 2006
Statut
Membre
Dernière intervention
26 mai 2009

Salut Tilius

As tu trouvé une solution ?
J'ai essayé 3000 milliard de truc rien à faire !
genre ce code donné en exemple dans l'aide et légèrement transformer pour en faire un fonction

[code]
  Public Function decodeFromWeb(ByVal s As String) As String

        ' Create two different encodings.
        Dim win As Encoding = Encoding.Default
        Dim web As Encoding = Encoding.UTF7

        ' Convert the string into a byte[].
        Dim webBytes As Byte() = web.GetBytes(s)

        ' Perform the conversion from one encoding to the other.
        Dim winBytes As Byte() = Encoding.Convert(web, win, webBytes)

        ' Convert the new byte[] into a char[] and then into a string.
        ' This is a slightly different approach to converting to illustrate
        ' the use of GetCharCount/GetChars.
        Dim winChars(win.GetCharCount(winBytes, 0, winBytes.Length) - 1) As Char
        win.GetChars(winBytes, 0, winBytes.Length, winChars, 0)
        Dim winString As New String(winChars)

        ' Display the strings created before and after the conversion.
        'Console.WriteLine("Original string: {0}", s)
        'Console.WriteLine("Ascii converted string: {0}", asciiString)
        Return (winString)
end Function
[code/]

Le convert ne converti rien du tout
le "é" code 63 venant du web ne se change pas en 233 (é du codage par défaut)

Fô t-il ré-inventer la poudre et faire un swicth case de l'enfer

Pas mal de gens tombent sur ce problème mais y a jamais personne qui y réponds

Alors Gaston t'as la solution
Messages postés
25
Date d'inscription
vendredi 15 septembre 2006
Statut
Membre
Dernière intervention
26 mai 2009

heu UTF7 était un essai, en fait au départ j'ai essayé getEncoding('28591") pour iso-8859-1
J'ai essayé UTF8, et tout un tas de bazar, rien y fait...
Messages postés
25
Date d'inscription
vendredi 15 septembre 2006
Statut
Membre
Dernière intervention
26 mai 2009

Après investigation profonde (très profonde) j'ai trouvé la solution

J'ai un code Visual Basic qui va chercher des infos sur un site web via un page php
code en VB pour lancer la commande sur le site :
        My.Computer.Network.DownloadFile(urlPhp, FileCSV)

urlPhp va fouiner dans une base MySQL et écrire le résultat de la requète sur la sortie standard (avec echo) sous le format CSV
mais il faut faire attention que sa sortie standard écrit en UTF-8 et non pas en ISO-8859-1
le cas échéant dans le code php sur le serveur il faut convertir à l'aide d'un petite fonction :

function convISO2U($str) {
    $i="ISO-8859-1";
    $o="UTF-8";
    return(iconv($i,$o,$str));
}


puis dans le code en visual basic on peut utiliser cette petite fonction :

    Public Function decodeFromWeb(ByVal s As String) As String

        ' Create two different encodings.
        Dim win As Encoding = Encoding.GetEncoding(1252)
        Dim web As Encoding = Encoding.GetEncoding(65001)

        ' Convert the string into a byte[].
        Dim fBytes As Byte() = web.GetBytes(s)

        ' Perform the conversion from one encoding to the other.
        Dim tBytes As Byte() = Encoding.Convert(web, win, fBytes)

        Dim tChars(win.GetCharCount(tBytes, 0, tBytes.Length) - 1) As Char
        win.GetChars(tBytes, 0, tBytes.Length, tChars, 0)
        Dim tString As New String(tChars)

        Return (tString)
    End Function


pour la conversion on a plusieurs solution, en france le mieux c'est celle que j'utilise ici soit :
encoding web (65001 - utf-8) encoding Win (1252 - Windows-1252)

mais toutes les suivantes fonctionnent aussi :web (65001 - utf-8) Win (1250 - windows-1250)web (65001 - utf-8) Win (1254 - windows-1254) web (65001 - utf-8) Win (1256 - windows-1256)web (65001 - utf-8) Win (1257 - windows-1257) web (65001 - utf-8) Win (1258 - windows-1258)

Pour trouver ces codages, j'ai fait une fonction de recherche en balayant toutes les combinaisons possibles de conversion.

Bises