エンコーディングがutf8の場合に、表示される文字(グリフ)を表すために異なる言語が平均して何バイト必要かを示すテーブルなどがありますか?
2 に答える
一般的なものが必要な場合は、これに固執する必要があると思います。
- 英語は1文字あたり1バイトよりわずかに多くかかります(非ASCII文字がときどきあり、多くの場合、句読点や記号がテキストに埋め込まれています)。
- ラテンアルファベットを使用する他のほとんどの言語は、1をいくらか多く使用しますが、たとえば1.5を超えると予想される場合は、驚かれることでしょう。
- 他のスクリプト(ギリシャ語など)を使用する言語は、1文字あたり約2バイトかかります。
- 東アジアの言語は、1文字あたり約3バイトを使用します(間隔、制御文字、および埋め込みASCIIを使用すると、使用量が少なくなり、非BMPを使用すると、使用量が多くなります)。
それはすべて非常に不完全で、概算であり、定量的ではありません。
もっと定量的なものが必要な場合は、それぞれの言語を個別に調査する必要があると思います。さまざまな言語のホストにすでに適用されている、事前に計算された結果が見つかるとは思えません。
言語のテキストのコーパスがある場合、必要な平均バイト数を簡単に計算できます。テキストコーパスのウィキペディアページから始めます。これは、英語で無料で利用できる優れたコーパスの少なくとも1つにリンクしており、他の言語でも利用できるコーパスがある可能性があります(リンクを探して調べたわけではありません)。
ちなみに、この情報を使用して、データベースフィールドの長さを(コメントで)示したとおりに切り捨てることはお勧めしません。まず、文学で構成されたコーパスを使用して1文字あたりの予想バイト数を考え出した場合、コーパスはデータベースに格納される短い小さなテキスト文字列をまったく表していないことに気付くかもしれません。あなたの期待。データベース列全体を取得するだけです。ほとんどの結果は最大長よりもはるかに短くなりますが、そうでない場合は、100バイト程度を節約する価値があるとは思いません。
Unicodeブロックとそのコードポイント範囲のリストを見てください。たとえば、閲覧可能なhttp://www.fileformat.info/info/unicode/block/index.htmまたは公式のhttp://www.unicode.org/Public/ UNIDATA / Blocks.txt:
- U + 007Fまでは1バイトかかります:基本ラテン語
- 次に、U + 07FFまでは2バイトかかります:ギリシャ語、アラビア語、キリル文字、ヘブライ語など。
- 次に、U + FFFFまでは、中国語、日本語、韓国語、デーバナーガリーなどの3バイトが必要です。
- それを超えてそれは4バイトかかります