unicode datei einlesen?
-
hab das ganze jetz so
wfstream file; wchar_t output[1000]; file.open(m_sourcefilename,ios::in); file.getline(output , 999) ;krieg da aber die selben sonderzeichen in den buffer, die ich auch bei der verwendung von fstream bekommen hab

-
Checker&Murckser schrieb:
war glaub eh n Fehler bei mir drin:
müsste es nicht heißen
basic_fstream<char, std::char_traits<wchar_t> > ?Nein, basic_fstream<wchar_t> war schon richtig (und im Einsatz sollte der Traits-Typ schon zum Zeichentyp passen, sonst hagelt's Probleme ;))
Edit @Smurf: Es kann auch sein, daß du eine Unicode-taugliche codecvt<> Facette zusammenbauen und deinem Stream übergeben mußt, damit er vernünftig arbeitet.
-
smuRf schrieb:
krieg da aber die selben sonderzeichen in den buffer, die ich auch bei der verwendung von fstream bekommen hab

Ist auch relativ logisch. 'wchar_t' definiert einfach nur Zeichen, die groß genug sein sollen, um Uncode-Codepunkte speichern zu können. Über die Codierung ist da aber noch nichts gesagt. In welchem Format ist denn die Datei gespeichert? Am einfachsten wird es wohl sein, die Datei in ein Byte-Array einzulesen (=> char[]), und dann anhand der korrekten Codierung zu konvertieren.
Wie das mit der Konvertierung geht, ist hier beschrieben: http://www.kharchi.de/cpp_strings.html
-
Konrad! Ja, interessante Seite!
Leider fehlt da aber noch etwas (werde ich mal nachtragen müssen):
http://www.boost.org/libs/serialization/doc/codecvt.htmlLeider weiß ich nicht, ob es auch unter Windows bzw. MSVC funktioniert.

-
wfstream ist nicht dafür da um unicode einzulesen, sondern um den betriebssystem spezifischen zeichensatz zu nutzen, und der ist zb unter windows nicht unicode sondern ein eigenes format.
wenn du unicode einlesen willst, musste wohl oder übel was eigenes schreiben oder das internet nach irgendwas passendem durchsuchen.
-
otze schrieb:
wfstream ist nicht dafür da um unicode einzulesen, sondern um den betriebssystem spezifischen zeichensatz zu nutzen, und der ist zb unter windows nicht unicode sondern ein eigenes format.
Hm? Also aktuelle Windows-Versionen verwenden intern die BMP von UTF-16 (little endian), welche sich auch als UCS-2 auffassen lässts. Von "eigenes Format" kann hier keine Rede sein.
-
Der Inhalt und die Codierung einer Datei hat letztendlich auch nichts mit Windows zu tun. Sind am Ende alles eh nur Bits und Bytes die da auf der Platte (auch bei NTFS) abgelegt werden. Und eine Textdatei muß man genauso decodieren, wie man es auch mit z.B. Bild- oder Sounddateien machen muß.
wfstream ist schon richtig, auch unter Windows.
-
kennt jemand ne 'deutschsprachige' seite wo der unterschied zwischen UTF UCS usw erklaert wird ?
btw: was hat ein 4 byte character fuer nen vorteil gegenueber einem 16 bit breien ? davon mal abgesehen das noch mehr speicherplatz verschwendet wird
Meep Meep
-
http://de.wikipedia.org/wiki/Universal_Character_Set
Von da aus wirst du erfahren was UTF ist und wo der Vorteil von 32bit breiten Charactern ggü. 16bit breiten ist.
-
Meep Meep schrieb:
kennt jemand ne 'deutschsprachige' seite wo der unterschied zwischen UTF UCS usw erklaert wird ?
Den Unterschied kann man auch in einen Satz packen: UCS-2 bzw. -4 sind vom ISO-Konsortium entwickelte Standards, welche der Byte-Repräsentation von UTF-16 bzw. UTF-32 (jeweils als little endian) entsprechen, jedoch hat UCS-2 im Gegensatz zu UTF-16 eine feste Breite von zwei Oktet und repräsentiert damit nur die Basic Multilingual Plane.