Unicode Datei schreiben
-
Hast du immer noch nicht verstanden, dass das nichts mit der GCC (es heisst "die GCC") zu tun hat, sondern - wenn schon - mit deiner Shell?
-
Mit der Shell auch nicht - wenn schon, mit dem Terminal.
-
SG1 schrieb:
Mit der Shell auch nicht - wenn schon, mit dem Terminal.
Hm, ich meine damals wurde mein Code nicht kompiliert mit Umlauten. Also weder Shell noch Terminal sondern entweder Compiler oder Encoding der Sourcedatei.
Was hat denn der OP für ein Problem mit dem Sondernzeichen, wenn er es direkt in einen String packt?
mfg, René~
-
NewSoftzzz schrieb:
Was hat denn der OP für ein Problem mit dem Sondernzeichen, wenn er es direkt in einen String packt?
Das die Datei einfach leer bleibt. Es wird nur bis zu dem Sonderzeichen in die Dateigeschrieben, sobald das Sonderzeichen kommt, bricht der stream ab.
-
@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