1

蘭亭集序は、中国文学史上「行书」の頂点として知られています。最も印象的な一文は、「生と死は同じものであり、長寿と早死に違いはないというのは嘘だということはわかっているが、ああ!」という内容全体の文字数を数えると(中国語版)、結果は 391 (句読点を含む) になります。これらの文字をテキストファイルに書き込む場合、データが壊れない範囲で可能なファイルサイズを選択してください。

A、UTF-16 エンコーディングで 782 バイト
B、UTF-16 エンコーディングで 784 バイト
C、UTF-8 エンコーディングで 1173 バイト
D、UTF-8 エンコーディングで 1176 バイト
E、上記の
どれが正解ですか? なぜ?

4

2 に答える 2

2

TL;DR

パニック大佐が指摘しているように、実際にこれを解決するには、391 文字の段落の各文字を詳細に分析する必要があります。しかし、あなたの審査官は本当に悪いユーモアのセンスを持っているようです - すべての文字が BMP に収まると仮定し、BOM が使用されているかどうかに応じて、4 つの答えはすべて間違いなく正しいです。あなたの最善の策は、UTF8 と UTF16 の両方を追加のエスケープ シーケンスにプッシュする、BMP にない珍しい文字を探すことです。その場合、答えは上記のいずれにもなりません。

詳細に

UTF-8 では、すべての ASCII 文字 (値 0 から 127) に対して 1 つの文字が存在します。

また、ほとんどの「一般的な」CJK 文字は 3 バイトを使用しているようですが、あまり一般的でない CJK 文字をエンコードするには 4 バイト全体が必要になる場合があります。もちろん、OS がバイト オーダー マーカーを必要とするかどうかによって異なります 。

たとえば、391 文字の段落のすべてのバイトが一般的な漢字であり、BOM がない場合、UTF-8 は 1173 バイトである必要があります。BOM を使用すると、これは 1176 バイトになります。

UTF-16 では、一般的な CJK 文字のほとんどがBasic Multilingual Planeにあるように思われるため、各文字をエンコードするのに 2 バイトしか必要としません。つまり、391 * 2 = 782 です。

UTF 16 には、ほとんどの場合、2 バイトのバイト オーダー マーカー(FE FF または FF FE)、つまり 784 バイトがあります。

FWIW、あなたが提供した 6 文字 (兰亭集序行书) はすべて BMP にあります -ここで確認してください

于 2012-09-21T14:52:44.057 に答える
1

詳細情報が必要です。UTF-8 と UTF-16 (UTF-32 ではない) は両方とも可変幅エンコーディングです。UTF-8 では、一部の文字は単一の 8 ビット バイト (オクテット) としてエンコードされ、他の文字は 4 つのオクテットを使用します。

于 2012-09-21T13:43:39.640 に答える