文字の格納方法の違い以外に、utf-32で表示できる言語とutf-8で表示できない言語の特殊文字はありますか?
4 に答える
すべてのUTFエンコーディングは、同じ範囲のコードポイント(0〜0x10FFFF)を表すことができます。したがって、同じ文字をそれらのいずれかでエンコードできます。
それらを「表示」できるかどうかは、まったく別の問題です。これは、エンコーディングや使用されているフォントファミリの機能とは関係ありません。すべてのUnicodeコードポイントにグリフが含まれているフォントがあるかどうかはわかりません。しかし、私はあなたが「代表される」ことを意味したと思います。
特定の文字列を表すために必要なバイト数は異なります。UTF-8は、ほとんどの場合、アジア以外の言語では最短です。それらの場合、UTF-16が勝つかもしれません(私は実際には「ベンチマーク」されていません)。UTF-32が最適であるという現実的なケースを想像することはできません。
そのうちの1人が表現できないキャラクターはありますか?
理論的には:いいえ。
これらの形式はすべて、すべてのUnicodeコードポイントを表すことができます。
実際には:依存します。
Windows APIはUCS-2(ほとんど最初のUTF-16チャンク)を使用し、サロゲートを常に正しく処理するとは限りません。したがって、UTF-16を使用して、高範囲のUTF-32コードポイントを手動で切り捨てるのではなく、プログラムを他のプログラムと比較して可能な限り「通常の」動作にすることができます。
他に何か?
はい:UTF-8を使用してください!
エンディアンがないため、後部の問題であるバイトオーダーの問題を回避できます。
もちろん、Windowsを使用している場合は、使用する前にUTF-16に変換する必要があります。
UTF-8、UTF-16、およびUTF-32はすべて、すべてのUnicodeデータポイントを表すために使用できます。したがって、UTF-8ではなくUTF-32で表現できる特殊文字はありません。
1)UTF-8は、通常の英語文字のASCIIと下位互換性があります。これは、クライアントに英語文字しかない場合に有利です。
2)UTF-8は、英語以外の文字よりもASCII文字を使用している場合に、ネットワーク帯域幅を節約するのに適しています。
3)ストレージスペースの節約という点で英語以外の文字が多い場合は、UTF-16が適しています。
上記の#1に基づいてUTF-8を使用することをお勧めします。