UTF-8 'durchschleifen'/konvertieren
-
Hallo,
SammyRukka schrieb:
Muss ich UNICODE einfach per define setzen oder ist das ein Compilereinstellung?
Ja, UNICODE wird durch #define bekannt gemacht, kann man im Code direkt machen oder aber in den Projekteinstellungen, die den Präprozessor betreffen.
SammyRukka schrieb:
Mit dem 'Unicode-Ausgabedateien verwenden' von Visual Studio Express hat das wohl nichts zu tun, oder?
Nein.
SammyRukka schrieb:
Und dann zum Verständnis: Wenn ich UNICODE nicht setzen würde, dann könnte ich den UTF-8-Krams auch nicht verarbeiten, weil LPCTSTR dann wieder nur ein char* wäre und dann wiederum jedes Byte dargestellt werden würde, so wie jetzt.
Nein, wenn man UNICODE setzt, legt man fest, dass man mit UTF-16-kodierten Zeichen arbeiten will, weswegen man UTF8 auch mit anderen Datentypen behandeln sollte. Wenn man aber sowieso irgendwann mit UTF-16 arbeiten will und entsprechende Windows-Datentypen/-Funktionen benötigt, dann kann man an die Definition von UNICODE denken.
SammyRukka schrieb:
wchar_t * aber führt zum Erfolg, weil es 'multibyte'-tauglich ist (Oha, da schwanke ich jetzt).
Wenn UNICODE definiert wurde, dann ist z.B. LPCTSTR vom Typ const wchar_t*
MfG,
Probe-Nutzer
-
So, hatte endlich wieder etwas Zeit...
Ich habe das scheinbar jetzt hinbekommen. Vermutlich trickse ich etwas zu viel:
string l_response = ....; int l_laengeXml = utf8::distance(l_response.begin(), l_response.end()); TCHAR* xmlBuffer = new TCHAR[l_laengeXml]; utf8::utf8to16 (l_response.begin(), l_response.end(), xmlBuffer); l_response = string(xmlBuffer).substr(0, l_laengeXml); delete[] xmlBuffer;
Damit kommt der Kram bei mir korrekt an.
Witzig ist nur, dass das Ganze auch ohne ein #define UNICODE funktioniert.
btw: UNICODE oder _UNICODE (OK, laut MSN ist _UNICODE richtig)?
---
Aber erst einmal Danke an Euch alle für Eure Zeit und die ertragenen Schmerzen!
---
Nachtrag:
Ich überlege gerade, ob das 'Zurückkopieren' in den String eigentlich korrekt ist oder nur (wie in meinem Fall) im unteren Bereich des Zeichensatzes funktioniert.
Ausserdem kommt mir der Teil mit der Länge des Buffers komisch vor, der wurde immer zu lang angelegt, weshalb ich am Ende immer Hieroglyphen hatte und das substr eingeführt habe.
Das und der Umstand, dass das alles auch ohne #define _UNICODE funktioniert, kann ich mir nicht so recht erklären, ausser, dass _UNICODE evtl. an anderer Stelle definiert wird. Ich habe aber meine Sourcen (inkl. benutztem externen Wrapper) geprüft - auch utf8cpp - ich kann da nichts finden.
Habt Ihr eine Idee? Ich würde das gern noch etwas mehr verstehen.