2

さまざまな言語のさまざまな Unicode エンコーディングの典型的な 1 文字あたりの平均バイト数は?

たとえば、英語のテキストをエンコードするために最小のバイト数が必要な場合、平均して UTF-8 は 1 文字あたり 1 バイト、UTF-16 は 2 バイトになるため、UTF-8 を選択します。

韓国語のテキストが必要な場合、UTF-16 は 1 文字あたり平均約 2 ですが、UTF-8 は平均約 3 です (わかりません。ここでは例示的な数値を作成しているだけです)。

さまざまな言語や文字セットで最小のストレージ要件が得られるエンコーディングはどれですか?

4

6 に答える 6

2

ほとんどの言語は連続したコードページに割り当てられているため、どの言語でも、文字あたりのバイト数はほぼ一定です。大きな例外は、アクセントのあるラテン文字です。これは、アクセントのない形式よりもコードスペースの上位に割り当てられます。私はこれらの難しい数字を持っていません。

連続した文字割り当てのある言語については、ウィキペディアにさまざまな言語の詳細な番号の表があります。一般に、UTF-8はほとんどの小さな文字セット(高コードページに割り当てられたものを除く)に適しています。UTF-16は2バイトの文字セットに最適です。

より高密度の圧縮が必要な場合は、Unicodeテクニカルノート14も参照してください。これは、さまざまな言語のデータサイズを削減するように設計されたいくつかの特殊用途のエンコーディングを比較しています。しかし、これらの手法は特に一般的ではありません。

于 2008-09-18T12:32:30.913 に答える
2

UTF8 は、文字が主に U+0800 未満の文字セットに最適です。それ以外の場合は UTF16。

つまり、ラテン語、ギリシャ語、キリル語、ヘブライ語、アラビア語、およびその他のいくつかの UTF8 です。ラテン語以外の言語では、文字は UTF16 の場合と同じスペースを占有しますが、句読点とスペースでバイトを節約できます。

于 2008-09-18T12:40:02.017 に答える
2

文字列/文字のサイズが本当に気になる場合は、それらを圧縮することを考えたことはありますか? これにより、文字列が「最小限の」エンコーディングに自動的に縮小されます。特にメモリ内で実行したい場合、これは頭痛の種であり、何も得られない場合がたくさんありますが、特にエンコーディングは、見た目のコンパクトさのレベルに対して汎用的すぎる傾向があります目指すこと。

于 2008-09-18T12:42:18.143 に答える
1

UTF-16 では、重要なすべての言語 (つまり、クリンゴン語、エルフ語、およびその他の奇妙なものを除く) は 2 バイト文字にエンコードされます。

問題は、文字長が 2 バイトまたは 1 バイトのグリフを持つ言語を見つけることです。

UTF-8 に関するウィキペディアのページ: http://en.wikipedia.org/wiki/Utf-8

Unicode インデックスが 0x0800 以上の文字は、UTF-8 で少なくとも 3 バイトの長さになることがわかります。

それを知っていれば、ユニコードのコードチャートを見るだけで済みます: http://www.unicode.org/charts/

要件に準拠する言語の場合。

:-)

ここで、使用しているフレームワークによっては、選択を行う必要がない可能性があることに注意してください。

  • Windows API では、Unicode は wchar_t 文字で処理され、UTF-16 です。
  • Linux では、Unicode は char で処理され、UTF-8 です。
  • ほとんどの準拠 XML パーサーと同様に、Java は内部的に UTF-16 です。
  • 私は、UTF-8 がデータベースの選択肢のエンコーディングであると言われました (興味のない技術会議... 申し訳ありません...)。

じゃあ、毒を取って…

:-)

于 2008-09-18T12:51:41.803 に答える
1

正確な数値はわかりませんが、日本語の場合、Shift_JIS は UTF-8 よりも 1 文字あたりの平均バイト数が少なく、EUC-JP も日本語テキスト用に最適化されているためです。ただし、それらは Unicode と同じコード ポイントのスペースをカバーしていないため、質問に対する正しい答えではない可能性があります。

UTF-16 は、日本語の文字 (1 文字あたり 3 バイトではなく 2 バイト) の場合は UTF-8 よりも優れていますが、7 ビット文字が多い場合は UTF-8 よりも劣ります。コンテキストに依存します。技術的なテキストには、1 バイトの範囲に多くの文字が含まれる可能性が高くなります。古典的な日本語のテキストには何もないかもしれません。

トランスポートの場合、データを圧縮 (gzip、bz2) できる場合、エンコーディングはそれほど重要ではないことに注意してください。Unicode のアルファベットのコード ポイントは互いに接近しているため、圧縮データでは非常に短い表現を持つ一般的なプレフィックスが期待されます。

UTF-8 は通常、UTF-32 や UTF-16 よりもコンパクトであり、ASCII または ISO-8859-1 NUL で終了する文字列を「期待」する char* の関数と互換性があるため、メモリ内での表現に適しています。ただし、インデックスによる文字へのランダム アクセスが必要な場合は役に立ちません。

非 BMP 文字を気にしない場合、UCS-2 は常に 1 文字あたり 2 バイトであるため、ランダム アクセスを提供します。しかし、それは「Unicode」の意味によって異なります。

于 2008-09-18T13:02:02.387 に答える
0

UTF-8

JoelOnSoftware には、Unicode に関する非常に優れた記事があります。

すべてのソフトウェア開発者が絶対に、積極的に Unicode と文字セットについて知っておく必要がある絶対最小値 (言い訳はありません!)

于 2008-09-18T12:35:06.663 に答える