Unicode Datei mit Umlauten lesen / CStdioFile ?
-
Hallo, ich habe bisher eine Textdatei mit enthaltenen Umlauten problemlos einlesen und verarbeiten können.
Nun wird diese Datei jedoch nicht mehr in ANSI sondern UTF8 geliefert, was ganz sicher ja auch Sinn macht.Im Auslesen der Umlaute habe ich nun jedoch ein Problem, da diese nicht mehr als solche ankommen
in meinem CString in der MFC-Anwendung.CString dateiinhalt; CStdioFile myFile; myFile.Open("c:\\test.txt", CFile::modeRead, NULL); while (myFile.ReadString(dateiinhalt)) { MessageBox(dateiinhalt, L"Zeilenweise prüfen"); } myFile.Close();
So wird aus dem enthaltenen Text:
"Diese Änderung ist öffentlich"nunmehr dieser Text:
"Diese Ãnderung ist öffentlich"
-
Die Daten werden schon korrekt gelesen.
Nur kennt CStdioFile AFAIK kein UTF-8 und kann hier UTF-8 nicht nach UFT-16 konvertieren.Du müsstest es von "Hand" konvertieren.
- Einlesen des Strings in ein CStringA
- Konvertierung des Strings in ein CStringW (Was dem CString bei dir entspricht)
Kompletter beispiel code für die Konvertierung: https://www.arclab.com/en/kb/cppmfc/convert-cstring-unicode-utf-16le-to-utf-8-and-reverse.html
-
@firefly
Man kann _tfopen verwenden und den FILE Stream einem CStdioFIle zurordnen.http://blog.m-ri.de/index.php/2007/07/03/vc-2005-features-der-crt-fuer-unicode-unterstuetzung/
-
@Martin-Richter sagte in Unicode Datei mit Umlauten lesen / CStdioFile ?:
@firefly
Man kann _tfopen verwenden und den FILE Stream einem CStdioFIle zurordnen.http://blog.m-ri.de/index.php/2007/07/03/vc-2005-features-der-crt-fuer-unicode-unterstuetzung/
Tja funktioniert automatisch aber nur wenn ein BOM existiert. Nur für UTF-8 ist der BOM nicht zwingend erforderlich -> Dadurch fällt die automatische Erkennung flach.
Man muss dann explizit angeben das es UTF-8 ist