Ich habe mich mal wieder heillos verfahren beim konvertieren von strings.
Situation:
Mein Webseiten-Provider erlaubt keinen externen Zugriff auf MySql, nur PHP Scripts auf der Seite selbst können zur Datenbank verbinden.
Darum hat meine C++ Anwendung kein mysql++ eingebaut, sondern ruft via WinInet ein PHP Script auf der Webseite auf, was die gewünschten Daten aus der Datenbank liest und über WinInet an meine Anwendung zurück gibt.
Probleme mit Zugriffsrechten habe ich gelöst, übrig ist nur ein kleines
Konvertier-Problem:
Alle Daten in der DB sind in UNICODE, das PHP Script liest das auch als UNICODE und gibt es auch als UNICODE weiter, aber WinInet liest die Daten in ein char[]-Array.
Solange alle strings nur "normale" Zeichen enthalten, ist das kein Problem, ich kann mit mbstowcs() meinen string zu wstring konvertieren und fertig, aber sobald Sonderzeichen wie "äöü" drin sind gibt das Murks, logisch.
Die Frage ist also: Nachdem ich vorher schon weiss, dass der antwortbuffer UNICODE enthält, wie kann ich es anstellen, direkt wstring draus zu machen, ohne dass ich auf dem Umweg über string und mbstowcs() die Sonderzeichen verliere?
Situation:
Mein Webseiten-Provider erlaubt keinen externen Zugriff auf MySql, nur PHP Scripts auf der Seite selbst können zur Datenbank verbinden.
Darum hat meine C++ Anwendung kein mysql++ eingebaut, sondern ruft via WinInet ein PHP Script auf der Webseite auf, was die gewünschten Daten aus der Datenbank liest und über WinInet an meine Anwendung zurück gibt.
Probleme mit Zugriffsrechten habe ich gelöst, übrig ist nur ein kleines
Konvertier-Problem:
Alle Daten in der DB sind in UNICODE, das PHP Script liest das auch als UNICODE und gibt es auch als UNICODE weiter, aber WinInet liest die Daten in ein char[]-Array.
Code:
unsigned long len;
string CompleteBuffer = "";
do{
char antwortbuffer[1000];
InternetReadFile(request,antwortbuffer,999,&len);
antwortbuffer[len] = '\0';
string temp(antwortbuffer);
CompleteBuffer = CompleteBuffer + temp;
} while(len);
Solange alle strings nur "normale" Zeichen enthalten, ist das kein Problem, ich kann mit mbstowcs() meinen string zu wstring konvertieren und fertig, aber sobald Sonderzeichen wie "äöü" drin sind gibt das Murks, logisch.
Die Frage ist also: Nachdem ich vorher schon weiss, dass der antwortbuffer UNICODE enthält, wie kann ich es anstellen, direkt wstring draus zu machen, ohne dass ich auf dem Umweg über string und mbstowcs() die Sonderzeichen verliere?