MYSQL liefert beim Auslesen von Unicodezeichen nicht die richtigen Werte



  • Hallo,

    in einer Tabelle meiner MYSQL Datenbank stehen deutsche, Spanische, Chinesiche etc. Texte.

    Befüllt wird die Tabelle über ein von mir geschriebenes PHP Programm. Im Browser werden die Unicode Daten korrekt angezeigt und an kann diese auch ändern und in die Datenbank zurückschreiben. Im MYSQL Query werden die Daten ebenfalls korrekt angezeigt. Auch mit Access kann man darauf zugreifen und die Daten werden korrekt angezeigt.

    Die komplette Datenbank steht auf UFT8 und auch die my.ini enthält den character Set UTF8.

    Lese ich aber die Daten mit c++ aus, so werden mir nicht die richtigen Werte zurück geliefert.

    CString ausgabe;
    int state; 
    
    MYSQL_RES *result; 
    MYSQL_ROW row;
    
    MYSQL *mConnection, mDB;
    
    mysql_init(&mDB);
    
    mConnection =mysql_real_connect(&mDB,mySQL_IP_adress,mySQL_USER,mySQL_PWD,mySQL_DB,0,0,0);
    if (mConnection == NULL)  {return ;}
    
    mysql_query(mConnection,"SET NAMES 'utf8';");
    
    state=mysql_query(mConnection,"Select Text from t_language where Number='15'");
    
    result = mysql_store_result(mConnection);
    
    row = mysql_fetch_row(result);
    
    ausgabe=row[0];
    

    In "ausgabe" wird nun nichts brauchbares angezeigt.Beispiel anstatt ᄩᄤᄬᄧ wird "ᄩᄤᄬᄧ" angezeigt

    Kann mir jemand helfen, was mache ich hier falsch?



  • Ist Dein Programm denn Unicode?
    Wenn nicht, würde ich esmal mit

    CStringW ausgabe;
    

    versuchen.

    Allerdings ken ich MySQL zu wenig und glaube auch nicht, dass dies ein MFC Thema ist.



  • Dieser Thread wurde von Moderator/in Martin Richter aus dem Forum MFC (Visual C++) in das Forum Datenbanken verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Danke für die schnelle Antwort.

    Es handelt sind um ein Unicode programm. Denn

    wchar_t ausgabe[20];
    ausgabe=wchar_t(0x1124); 
    ausgabe+=wchar_t(0x1125);
    

    zeigt im Dialog Ѥѥ an.

    Mit CStringW funktioniert es leider auch nicht.



  • Naja UTF-8 ist halt nicht UTF-16.
    Du musst das was aus der Datenbank kommt schon selbst von UTF-8 nach UTF-16 konvertieren.



  • Wieso muss man das Ergebnis denn in UTF16 umwandeln. Andere Programme wie Access oder Websides zeigen die Daten doch richtig an? Und alle sind auf UTF8 eingestellt.

    Gibt es einen Befehl für das Umwandeln von UTF8 nach UTF16? Bei Google habe ich nichts gefunden.



  • Klaus_H schrieb:

    Wieso muss man das Ergebnis denn in UTF16 umwandeln.

    Weil.

    Andere Programme wie Access oder Websides zeigen die Daten doch richtig an? Und alle sind auf UTF8 eingestellt.

    Aha.

    Gibt es einen Befehl für das Umwandeln von UTF8 nach UTF16? Bei Google habe ich nichts gefunden.

    Ja.
    Versuchs mal mit MultiByteToWideChar.



  • Es funktioniert

    MultiByteToWideChar(CP_UTF8,0,row[1],-1,ausgabe,sizeof(ausgabe));
    

    Danke Klaus


Anmelden zum Antworten