いくつかの異なる言語のファイルがいくつかあります。それらはすべてUTF-8でエンコードされていると思っていましたが、今はよくわかりません。きれいに見える文字もあれば、そうでない文字もあります。文字列を分割して文字セットを特定する方法はありますか? おそらく、空白で分割してから、各単語を識別しますか? 最後に、あるセットの文字を UTF-8 に変換する簡単な方法はありますか?
3 に答える
確かに文字セットがわからない場合は、基本的に推測することしかできません。utf8 :: validはそれを助けるかもしれませんが、あなたは本当に確実に知ることはできません。Unicodeでない場合は、特定の文字セット(Latin-1など)である必要があることがわかっている場合は、幸運です。あなたが知らないなら、あなたはめちゃくちゃです。いずれの場合も、特に指定がない限り、ファイル全体が同じ文字セットであると常に想定する必要があります。そうしないと、正気を失うことになります。
文字セット間で変換する方法についての質問:エンコードはあなたのためにそれを行うためにあります
ファイルがおそらくUTF-8であるかどうかを判断するのは、非常に簡単です。UTF-8でない場合のエンコーディングの決定は、一般的に非常に困難です。
ファイルがUTF-8でエンコードされている場合、各バイトの上位ビットはパターンに従う必要があります。文字が1バイトの場合、その上位ビットはクリアされます(ゼロ)。それ以外の場合、n
バイト文字(nは2〜4)ではn
、最初のバイトの上位ビットが1に設定され、その後に1つのゼロビットが続きます。次のn - 1
バイトはすべて、最上位ビットが設定され、2番目に上位のビットがクリアされている必要があります。
ファイル内のすべてのバイトがこれらのルールに従っている場合は、おそらくUTF-8でエンコードされています。おそらく、意図的または偶然に同じルールに従う新しいエンコーディングを誰でも発明できるが、コードの解釈が異なるためだと思います。
US-ASCIIでエンコードされたファイルはこれらの規則に従いますが、すべてのバイトの上位ビットはゼロであることに注意してください。この範囲では互換性があるため、このようなファイルをUTF-8として扱っても問題ありません。それ以外の場合、それは他のエンコーディングであり、エンコーディングを区別するための固有のテストはありません。推測するには、いくつかのコンテキスト知識を使用する必要があります。