Unicode Datei schreiben
-
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