Frage

Es scheint, als gäbe es eine Mehrdeutigkeit zwischen dem Byte Order Marks verwendet für UTF16-LE und UTF-32LE. Insbesondere sollten Sie eine Datei, die die folgenden 8 Bytes enthält:

FF FE 00 00 00 00 00 00

Wie kann ich feststellen, ob diese Datei enthält:

  1. Die UTF16-LE BOM (FF FE) um 3 Null-Zeichen gefolgt; oder
  2. Die UTF32-LE BOM (FF FE 00 00), gefolgt von einem Null-Zeichen?

Unicode Stücklisten werden hier beschrieben: http://unicode.org/faq/utf_bom.html # bom4 aber es gibt keine Diskussion über diese Zweideutigkeit. Bin ich etwas fehlt?

War es hilfreich?

Lösung

Wie der Name schon sagt, nur die Stückliste informiert Sie über die Byte-Reihenfolge , nicht die Codierung. Sie müssen wissen, was die Codierung zuerst, dann können Sie die Stückliste verwenden, um festzustellen, ob die am wenigsten oder höchstwertigen Bytes zuerst für Mehrbyte-Sequenzen sind.

Ein erfreulicher Nebeneffekt der BOM ist, dass man manchmal auch verwenden, die Codierung zu erraten, wenn Sie es nicht wissen, aber das ist nicht das, was es entworfen wurde, für und es ist kein Ersatz für das Senden geeignete Codierung Informationen .

Andere Tipps

Es ist eindeutig. FF FE ist für UTF-16LE und FF FE 00 00 bezeichnet UTF-32LE. Es gibt keinen Grund, dass FF FE 00 00 zu denken ist möglicherweise UTF-16LE, weil die UTFs für Text entworfen wurden, und die Nutzer sollten nicht NUL-Zeichen in ihrem Text werden. Nach allem, wenn war das letzte Mal einen Hex-Editor geöffnet und eingefügt ein paar Bytes von 00 in ein Textdokument? ^ _ ^

Ich habe das gleiche Problem wie Edward erlebt. Ich stimme mit Dustin, in der Regel wird man nicht null-Zeichen in Text-Dateien verwendet werden.

Allerdings habe ich eine Datei erstellt, die alle Unicode-Zeichen enthält. Ich habe zuerst die utf-32le Codierung, dann eine utf-32BE-Codierung, einen utf-16LE und ein utf-16BE kodiert, sowie eine utf-8-Codierung verwendet wird.

Wenn neu codieren zu versuchen, die Dateien auf utf-8, ich wollte das Ergebnis an die bereits bestehenden utf-8-Datei vergleichen. Da das erste Zeichen in meinen Dateien nach der BOM das Null-Zeichen ist, konnte ich nicht die Datei erfolgreich mit utf-16LE BOM erkennt, zeigte sie als utf-32le BOM nach oben, da das Bytes erschien genau wie Edward beschrieben hat. Das erste Zeichen nach der BOM FFFE ist 0000, aber die BOM Erkennung eines BOM FFFE0000 gefunden und so detektiert utf-32le statt utf-16LE wobei mein erster 0000-Charakter wurde als Teil der BOM gestohlen und genommen.

So sollte man nie eine Null-Zeichen als erstes Zeichen einer Datei mit UTF-16 Little Endian codiert verwenden, weil es die utf-16LE und utf-32le BOM mehrdeutig machen wird.

mein Problem zu lösen, ich werde die erste und zweite Zeichen tauschen. : -)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top