Problem mit std::codecvt_utf8<wchar_t>
-
Hallo,
ich versuche momentan eine UTF-8 kodierte Datei einzulesen ohne dabei auf Qt zurückzugreifen. Dazu verwende ich die codecvt_utf8<wchar_t> Klasse, die schon vom aktuellen Windows Kompiler unterstützt wird.
Hier zuerst der Code:#include <iostream> #include <string> #include <locale> #include <fstream> #include <codecvt> using namespace std; int main() { std::locale utf8_locale(std::locale(), new std::codecvt_utf8<wchar_t, 111411UL, std::consume_header>(0)); std::wifstream fs; fs.imbue(utf8_locale); fs.open("test.txt"); if (!fs.is_open()) { wcout << "Couldn't open file"; return 0; } std::wstring s; getline(fs, s); wcout << s; wcin.get(); }Die Datei test.txt ist eine UTF-8 kodierte Datei mit Header (deswegen std::consume_header). Zumindest gehe ich davon aus, dass sie UTF-8 kodiert ist, da ich sie vorher mit Visual Studio so abgespeichert habe.
Eingelesen wird die erste Zeile, die lediglich äöü lautet. Ausgegeben wird õ÷³.
Mache ich irgendetwas falsch oder liegt es an der Konsole?
Gruß,
Frager
-
Das kann durchaus an der Konsole liegen Windows unterstützt kein Unicode in der Konsole. Es gibt nur eine extra Unicode Konsole von einem 3. Hersteller, Name weiß ich leider grade nicht.
Setz doch mal ein Breakpoint im Debugger bzw gebe es als MessageBox aus evtl. passt es dann schon.
Auch wird generell von Windows kein UTF-8(char) Locale unterstützt sondern nur UCS-16 (wchar 2 byte). Aber da du ja sowieso schon die konvertierung durchführst sollte es prinzipiell gehen.
-
DaRpH schrieb:
Das kann durchaus an der Konsole liegen Windows unterstützt kein Unicode in der Konsole.
echt ?
ich war der meinung das ab windows 2000 die console mit unicode arbeitet
-
Meep Meep schrieb:
DaRpH schrieb:
Das kann durchaus an der Konsole liegen Windows unterstützt kein Unicode in der Konsole.
echt ?
ich war der meinung das ab windows 2000 die console mit unicode arbeitetKorrekt. Aber je nach Windows muß man noch einstellen, daß in der Konsole eine Schriftart (also Lucida Console) verwendet wird, damit das richtig geht.
-
Mh, also es scheint tatsächlich ein Problem der Konsole zu sein. Wenn ich mir nämlich mit Hilfe des Debuggers des Inhalt des wstrings s ansehe, wird korrekt "äöü" angegeben.
Jetzt bleibt die Frage wie ich diesen Text auch auf die Konsole bekomme. "Lucida Console" habe ich schon als Schriftart gewählt - mit dem gleichen Ergebnis.
Vielen Dank für die Hilfe,
Frager