Unicode-Datei lesen/schreiben
-
Hallo,
ich möchte eine Unicode-Datei einlesen, den Text evtl. bearbeiten, und anschließend in eine neue Datei wieder rausschreiben.
An der Kodierung selbst wird also nichts verändert, weswegen das Schreiben ja eigentlich problemlos funktionieren sollte, eigentlich :).
Hier mal mein ein Ausschnitt:
wifstream wifs("in.txt"); wofstream wofs("out.txt"); while(!wifs.eof()) { wstring ws; getline(wifs, ws); wofs << ws << endl; } wofs.close(); wifs.close();
Problem:
In out.txt steht dann irgendwie unlesbare Zeichen.
Ich habe leider keine Ahnung woran das liegt, hat von euch jdm. eine Idee?Würde mich freuen!
Viele Grüße
-
Was ist denn die zugrunde liegende Kodierung von
in.txt
?Schon mit
std::u16string
/char16_t
versucht? Windows verwendet ab Windows 2000 doch UTF-16.Edit: Wenn du denn Windows benutzt ... was ich stark annehmen darf :p
-
Hallo,
ja ich verwende Windows und die zugrundeliegende Kodierung von in.txt ist UTF-16LE oder UCS2LE.
Das was ich nicht verstehe ist, warum out.txt != in.txt ist.
Im Prinzip führe ich ja nur eine Kopieroperation durch, ohne die Kodierung zu verändern...
Viele Grüße
-
Ja, aber
wchar_t
ist nicht zwangsläufig UTF-16 kodiert.Daher veränderst du die Kodierung, insofern
wofstream
jawchar_t
als zugrunde liegenden Zeichentyp hat.ISO/IEC 10646:2003 Unicode standard 4.0 schrieb:
The width of wchar_t is compiler-specific and can be as small as 8 bits. Consequently, programs that need to be portable across any C or C++ compiler should not use wchar_t for storing Unicode text. The wchar_t type is intended for storing compiler-defined wide characters, which may be Unicode characters in some compilers.
-
Öffne die Dateien mal im Binärmodus.
-
Caligulaminus schrieb:
Öffne die Dateien mal im Binärmodus.
Bringt leider nichts.
Unter
http://www.cplusplus.com/
steht auch man sollte Textdateien nicht imbinary mode
öffnen?Sone schrieb:
Ja, aber wchar_t ist nicht zwangsläufig UTF-16 kodiert.
Daher veränderst du die Kodierung, insofern wofstream ja wchar_t als zugrunde liegenden Zeichentyp hat.
ISO/IEC 10646:2003 Unicode standard 4.0 schrieb:
The width of wchar_t is compiler-specific and can be as small as 8 bits. Consequently, programs that need to be portable across any C or C++ compiler should not use wchar_t for storing Unicode text. The wchar_t type is intended for storing compiler-defined wide characters, which may be Unicode characters in some compilers.Hmm - und nun?
Ich könnte natürlich die Ausgangsdateiin.txt
in UTF8 speichern, dann hätte ich die ganzen Probleme nicht.Es kann doch nicht so schwierig sein mit C++ Unicode-Datei einzulesen und zu verarbeiten^^.
VG
-
Wie sehen denn die beiden Dateien aus?
Vielleicht liegt's am BOM?