Problème accents entre Mysql et VB

tilius74 Messages postés 6 Date d'inscription lundi 22 septembre 2008 Statut Membre Dernière intervention 16 octobre 2008 - 16 oct. 2008 à 10:59
cs_tomboul Messages postés 25 Date d'inscription vendredi 15 septembre 2006 Statut Membre Dernière intervention 26 mai 2009 - 17 mars 2009 à 02:09
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

gillardg Messages postés 3275 Date d'inscription jeudi 3 avril 2008 Statut Membre Dernière intervention 14 septembre 2014 2
16 oct. 2008 à 11:27
regarde si tu as la possibilité de définir
CHARACTER SET =ANSI

Bonjour chez vous !
0
tilius74 Messages postés 6 Date d'inscription lundi 22 septembre 2008 Statut Membre Dernière intervention 16 octobre 2008
16 oct. 2008 à 11:35
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 ?
0
cs_tomboul Messages postés 25 Date d'inscription vendredi 15 septembre 2006 Statut Membre Dernière intervention 26 mai 2009
17 mars 2009 à 00:10
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
0
cs_tomboul Messages postés 25 Date d'inscription vendredi 15 septembre 2006 Statut Membre Dernière intervention 26 mai 2009
17 mars 2009 à 00:13
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...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_tomboul Messages postés 25 Date d'inscription vendredi 15 septembre 2006 Statut Membre Dernière intervention 26 mai 2009
17 mars 2009 à 02:09
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
0
Rejoignez-nous