UTF-8 auf WindowsConsole
-
Man möge mich steinigen, aber ich bekomme es nicht hin, dass mir die Windows-Console UTF-8 korrekt ausgibt.
Oder anders gefragt: Kann die das überhaupt?
ä,ü,ö werden immer als Hieroglyhphen dargestellt.
Lt der Lib utf8cpp von Sourceforge ist die Codierung aber korrekt innerhalb des std::string.Ich setze am Anfang vom Programm die Lokale als Bsp.:
std::locale m_locale = std::locale(""); //Standard-Lokale std::cout.imbue(m_locale); // cout einstellen
Wie gesagt, so geht es nicht. Gesetzt wird auch CP 1252. CHCP gibt entsprechend das auch aus. Auf std::locale("German_Germany.UTF-8"); reagiert das Programm nicht. Ich erhalte dann wieder German_Germany.1252 auf locale.name().
Kann hier jemand weiterhelfen? (und ja ich hab gesucht und ja, ich hab noch nicht 100% die Erfahrung mit i18n).
Danke :).
rya.
-
Oder anders gefragt: Kann die das überhaupt?
Ich glaube nicht.
-
also kA obs soo genau hinhaut aber ich persönlich denk bei utf8 immer gleich an unicode und die lassen sich zb durch wcout ausgaben oder halt durch wcin eingeben (w = wide halt^^)...
strings mit dem typ wchar_t kannst du verwenden indem du entweder nen eigenen typ erstellsttypedef std::basic_string<TCHAR> string_type; // für windows => auch für char verwendbar ;) typedef std::basic_string<wchar_t> string_type;
vielleicht hilft dir das auch weiter - umlaute lassen sich damit definitiv ausgeben
-
sry für doppelpost aber hab leider auch was vergessn - sry *duckundweg*
strings mit dem typ wchar_t kannst du verwenden indem du entweder nen eigenen typ erstellst...
oder indem du gleich wstring verwendest - müsste eig als typ definiert sein
kannste verwenden wenn du 100%ig mit den widechars arbeitest und auf die portabilität zum normalen char verzichten kanst
(ich bevorzuge aber den eigenen typ ^^)
-
Und bevor dir jetzt noch gute Seelen weitere Vorträge halten:
Es gibt einen guten Artikel, falls du dich mit Unicode nicht auskennst:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-161855.htmlEs geht dir aber, denke ich, um das Ausgabemedium, und das kann auch langen
Vorträgen immer noch keinen Unicode (hab ich gehört -- sollte ich mal richtig prüfen).
-
Danke für die Antworten.
Also generell reicht für UTF-8 ja char locker aus von der Breite. Geht ja auch nicht um die Speicherung, damit hab ich mich schon oft befasst hehe. wchar_t wäre ja dann eher für UCS2 oder ähnliches, aber das funktioniert ja unter Windows eh, aber ich will das konvertieren umgehen.
Das Problem ist folgendes: Für meine moFileReaderSDK (http://mofilereader.googlecode.com/) will ich eine Locale-Klasse entwerfen, die sich genauso wie gettext verhält, sprich lädt die richtige .mo-Datei je nach lokale lädt über ein gebundenes Verzeichnis. Dabei bin ich auf das Problem gestoßen. Aber lt http://mail.python.org/pipermail/python-list/2003-April/200079.html ist das anscheinend ein klein wenig größeres Problem Windows auf UTF-8 zu bekommen, hehe. Man kann die CP 65001 zwar setzen, aber die Zeichen sind weiterhin Hieroglyphen.
Im prinzip net schlimm, weil ich verwende für Anwendungen eh wxWidgets und meine SDK zielt nicht darauf ab, eine komplette i18n-lib zu sein (: sondern nur ein Loader für .mo-Files und das funktioniert.
rya.