"C++" UTF8 -> Multi-Byte

Raven280438

Erfahrenes Mitglied
Hi,

ich schreibe ein Programm in dem ich eine Webseite auslese. Das Programm ist auf Multi-Byte eingestellt, die Webseite ist in UTF8.

Wenn sich im Webseiten-Quellcode Umlaute befinden werden die zerstört.

Wie kann ich den UTF8-Quellcode in Multi-Byte umwandeln, damit die Umlaute richtig angezeigt werden (am Besten ohne eine externe Library)?


Gruß
 
Wie kann ich den UTF8-Quellcode in Multi-Byte umwandeln, damit die Umlaute richtig angezeigt werden (am Besten ohne eine externe Library)?
UTF8 ist bereits ein Multi-Byte-Zeichensatz.

Etwas mehr Informationen wären nicht schlecht. Geht es um eine Windows-Anwendung (Vermutung: ja)? Arbeitest du mit Visual Studio (Vermutung: ja)? Wie und wo versuchst du, die UTF8-Zeichenkette auszugeben?

Grüße,
Matthias
 
Hi,

ja, es ist eine Windows-Anwendung (mit wxWidgets).

Ich hole mit InternetReadFile den Inhalt einer Webseite:
Code:
std::string data;

HINTERNET hOpen = InternetOpen("TestTool",INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, NULL);
HINTERNET hFile = InternetOpenUrl(hOpen,url.c_str(), NULL, NULL, INTERNET_FLAG_RELOAD, NULL);
		
bool success = true;
while ((success = InternetReadFile(hFile, Return, sizeof(Return), &bytesRead)) && bytesRead != 0) {
	data.append(_T(Return), bytesRead);
}

In data steht dann korrekt der Inhalt der Webseite drin.

Danach lasse ich einen std::tr1::regex drüberlaufen um einen bestimmten Teil-String zu bekommen, der Umlaute enthält.
Das Ganze geb ich dann in einer wxComboBox aus. Dabei sind die Umlaute zerstört.


Gruß
 
Hi.

Eine HTML Seite aus dem Netz kann sehr unterschiedliche Kodierungen verwenden. Mit InternetReadFile liest du nur die puren Bytes.

Du müßtest erstmal feststellen um welche Kodierung es sich handelt.

Da bietet wxWidgets sicherlich auch Hilfsfunktionen an. Du kannst eine Seite auch z.B. mit wxURL::GetInputStream auslesen. Ist einfacher und nicht system-spezifisch.

Gruß
 
Zurück