Unicode Datei schreiben
-
@Op, versuch mal folgendes in die Datei zu schreiben (bitte den String genau so in die .cpp kopieren:
"abカタカナcd"
Und dann meld dich mal wieder mit dem Ergebnis
mfg, René
-
Es wird nur "ab" in die Datei geschrieben...
-
Keine Ahnung schrieb:
Es wird nur "ab" in die Datei geschrieben...
Benutz mal statt wofstream nur ofstream und melde dich wieder.
mfg, René~
-
Dann kommt eine Compilerwarnung für jedes Zeichen:
warning C4566: Das durch den universellen Zeichennamen "\u30AB" dargestellte Zeichen kann in der aktuellen Codepage (1252) nicht dargestellt werden.Die ganzen Sonderzeichen werden durch ein Fragezeichen (3F) ersetzt.
-
Hm okay, dann sind jetzt die Leute gefragt, die hier immer behaupten es liegt NICHT am Compiler. Was muss OP machen? Kenne mich mit dem Windows Compilerzeugs nicht aus

mfg, René~
-
Bei Visual C++ unter File->Advanced Save Options, irgendein Unicode-Encoding auswählen. Default ist die in der Warnung vorkommende Codepage 1252.
EDIT: Also liegt es nicht direkt am Compiler sondern an der IDE bzw. deren Standardeinstellungen
.
-
Ich hab jetzt wirklich ALLE Dateien auf UTF-8 umgestellt (hatte vorher nur meine main.cpp), trotzdem kommt diese Warnung mit der Codepage 1252, obwohl ich die gar nicht benutze. Liegt das irgendwie an den STL-Headern die ich einbinde oder was?
-
Standard der globalen Locale ist "C", die U.S. English ASCII aus der Standard C Bibliothek. Diese hat in ihrer Zeichentabelle keine Unicode-Zeichen, damit wird auch nichts in die Datei geschrieben.
Folgendes sollte unter Windows helfen:std::locale::global(std::locale(""));wofstream heisst nicht Unicode (das ist auch mit ofstream möglich), sondern nur UTF-16. Und UTF-8 (=ofstream) ist die verbreitetere Codierung.
ofstream (char = 1 Byte)und utf-8 (multibypte = 1-4 Byte) haben nichts miteinander zu tun.
-
So wird zwar alles in die Datei geschrieben, doch es werden nicht alle Unicode Zeichen angenommen, zb.
\u2081klappt, aber\u2094klappt nicht. Zudem wird aus meiner tiefgestellten eins, eine normale eins...
-
ok, mit std ist das so nicht möglich, da wofstream das Facet std::codecvt aufruft, und hier die wchar_ts nach char konvertiert werden.
Entweder du nimmst die C-Funktion fwrite:
http://bytes.com/topic/c/answers/140537-unicode-cwchar_t myWString[] = L"Some strange characters." fwrite(myWString, sizeof(wchar_t), sizeof(myWString)/sizeof(wchar_t), myFile );oder ließt dir das mal durch und nimmst die codecvt-Klasse von dort:
http://www.codeproject.com/KB/stl/upgradingstlappstounicode.aspx?print=true
-
Danke, dein zweiter Thread hat sehr geholfen.
Problem gelöst