SQLITE3 Datenübergabe ist nicht UTF8



  • Hallo

    ich nutze SQLite3 zum Loggen bestimmter Fehler, und habe das Problem das mir alle Sonderzeichen wie ä ö ü ß usw. nur als ? Dargestellt werden.

    Wenn ich mit nem Hex-Editor in die Datenbank-Datei schaue, die mein Programm füllt, stehen da die Sonderzeichen in Klartext drin, --> Unicode.

    Erstelle ich eine Datenbank mit einem SQLite Database Browser-Tool und lege die gleichen Datensätze an, werden diese korrekt angezeigt und sind im Hexeditor nicht mehr in Klarsicht sichtbar sondern haben das UTF8 Format.

    Die Bibliotheken von SQLite nutzen alle UTF8, aber meine Datensätze landen immer als Unicode in der DB-Datei...

    Wie kann ich einen Datensatz aus meinem Programm als UTF8 und nicht als Unicode speichern?

    Mein Code:

    CString strsqlite3 = "INSERT INTO log VALUES('" + strdate + "' , '" + strtime + "', " + strdllerr + " , '" + fullerrortxt + "' , " + strswid + " , '" + SerNr + "')";
    
    	//SQLITE3 Eintragen
    	sqlite3 *db;
    	char *zErrMsg = 0;
    	int rc;
    
    	//SQLITE Datenbank öffnen
    	rc = sqlite3_open("C:\\Log\\sqlitelog.db", &db);
    	if( rc )
    	{
    		//Fehlermeldung
    		sqlite3_close(db);
    		return(1);
    	}
    
    	//SQLITE Befehl ausführen
    	rc = sqlite3_exec(db, strsqlite3, callback, 0, &zErrMsg);
    	if( rc!=SQLITE_OK )
    	{
    		//Fehlermeldung
    	}
    
    	//SQLITE Datenbank schließen
    	sqlite3_close(db);
    

    Projekttyp: MFC ActiveX Steuerelement

    Ist etwas an meinem Code verkert oder muss ich eher in den Projekteinstellungen suchen.

    Kennt jemand das Problem?

    Gruß Stefan



  • WideCharToMultiByte mit CP_UTF8 macht aus deinem Unicode CString eine UTF8-Bytefolge



  • Du solltest ein UNICODE-Projekt/ActiveX anlegen! Bzw. Dein Projekt umstellen auf Unicode! (Projekteinstellungen|General|Character set)
    Und die Unicode-Zeichen dann mittels der schon angegebenen Methode (WideCharToMultiByte(CP_UTF8)) entsprechend umwandeln, falls das sqlite keine UTF-16 (wchar_t) Schnittstelle hat...



  • Hab mit euren Vorschlägen folgenden Artikel gefunden, mit dem ich das Problem lösen konnte:

    http://www.codeproject.com/Articles/26134/UTF16-to-UTF8-to-UTF16-simple-CString-based-conver

    Danke! 🙂


Anmelden zum Antworten