2008-11-25 17 views
7

Ich habe mehrere Dateien in mehreren verschiedenen Sprachen. Ich dachte, sie wären alle UTF-8 kodiert, aber jetzt bin ich mir nicht mehr so ​​sicher. Einige Charaktere sehen gut aus, andere nicht. Gibt es einen Weg, wie ich die Strings ausbrechen und versuchen kann, die Zeichensätze zu identifizieren? Vielleicht auf weißem Raum aufgeteilt, dann jedes Wort identifizieren? Gibt es schließlich eine einfache Möglichkeit, Zeichen aus einem Satz in UTF-8 zu übersetzen?Wie ermittle ich den Zeichensatz eines Strings?

Antwort

6

Wenn Sie die Zeichen sicher Sie setzen nicht wissen können, im Grunde nur raten. utf8::valid könnte Ihnen dabei helfen, aber Sie können nicht wirklich sicher wissen. Wenn du weißt, dass wenn es nicht Unicode ist, muss es ein bestimmter Zeichensatz sein (wie Latin-1), du Glück. Wenn du keine Ahnung hast, bist du verrückt. In jedem Fall sollten Sie immer davon ausgehen, dass die gesamte Datei denselben Zeichensatz enthält, sofern nicht anders angegeben. Du wirst deinen Verstand verlieren, wenn du es nicht tust.

Was Ihre Frage, wie zwischen Zeichensätzen konvertieren: Encode gibt es zu tun, dass für Sie

6

Feststellung, ob eine Datei wahrscheinlich UTF-8 ist oder nicht recht einfach sein sollte. Das Bestimmen der Codierung, wenn es nicht UTF-8 ist, wäre im Allgemeinen sehr schwierig.

Wenn die Datei mit UTF-8 codiert ist, sollten die hohen Bits jedes Bytes einem Muster folgen. Wenn ein Zeichen ein Byte ist, wird sein High-Bit gelöscht (Null). Andernfalls wird ein n Byte-Zeichen (wobei n 2 – 4 ist) die hohen n Bits des ersten Bytes auf eins gesetzt, gefolgt von einem einzelnen Null-Bit. Die folgenden n - 1 Bytes sollten alle das höchste Bit gesetzt und das zweithöchste Bit gelöscht haben.

Wenn alle Bytes in Ihrer Datei diesen Regeln folgen, ist es wahrscheinlich mit UTF-8 codiert. Ich sage wahrscheinlich, weil jeder eine neue Codierung erfinden kann, die zufälligerweise oder zufällig denselben Regeln folgt, aber die Codes anders interpretiert.

Beachten Sie, dass eine mit US-ASCII codierte Datei diesen Regeln folgt, aber das High-Bit jedes Bytes ist Null. Es ist in Ordnung, eine solche Datei als UTF-8 zu behandeln, da sie in diesem Bereich kompatibel ist. Ansonsten ist es eine andere Kodierung, und es gibt keinen inhärenten Test, um die Kodierung zu unterscheiden. Sie müssen etwas kontextbezogenes Wissen verwenden, um zu erraten.

Verwandte Themen