2009-07-30 6 views
4

Ich muss eine Textdatei lesen, die Unicode mit UTF-8-Codierung ist und diese Daten in eine andere Textdatei schreiben müssen. Die Datei enthält tabulatorgetrennte Daten in Zeilen.Lesen einer UTF-8 Unicode-Datei durch Nicht-Unicode-Code

Mein Lesecode ist C++ - Code ohne Unicode-Unterstützung. Ich lese die Datei Zeile für Zeile in einer string/char* und setze diese Zeichenfolge unverändert in die Zieldatei. Ich kann den Code nicht ändern, daher sind Code-Change-Vorschläge nicht erwünscht.

Was ich wissen möchte, ist, dass ich beim zeilenweisen Lesen ein NULL-Endzeichen ('\ 0') innerhalb einer Zeile finden kann, da es Unicode ist und ein Zeichen mehrere Bytes umfassen kann.

Mein Denken war, dass es durchaus möglich ist, dass ein NULL-Abschlusszeichen innerhalb einer Zeile angetroffen werden konnte. Ihre Gedanken?

Antwort

13

UTF-8 1 Byte für alle ASCII-Zeichen verwendet werden, die die gleichen Codewerten wie in der Norm haben ASCII-Codierung und bis zu 4 Byte für andere Zeichen. Die oberen Bits jedes Bytes sind als Steuerbits reserviert. Bei Codepunkten mit mehr als 1 Byte werden die Steuerbits gesetzt.

Daher darf in Ihrer UTF-8-Datei kein 0 Zeichen enthalten sein.

prüfen Wikipedia for UTF-8

+2

Tatsächlich wurde UTF-8 speziell so entworfen, dass dies zutrifft, weil es nützlich ist, eine Kodierung zu haben, in der der ASCII-Bereich in jeweils einem Byte gespeichert ist, und die vernünftig funktioniert, wenn sie an 'strcpy() übergeben wird. 'und seine Freunde. – RBerteig

1

sehr unwahrscheinlich: alle Bytes in einer UTF-8-Escape-Sequenz haben das höhere Bit auf 1 gesetzt

+0

Maurice, gibt es eine Referenz diese Aussage unterstützen? – Aamir

+0

Siehe CsTamas Nachricht –

+2

Siehe http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 –