4

文字をファイルに書き込んでé16 進エディタで開くと、バイト 0xC3、0xA9 が表示されます。

ウィキペディアでは、最初のバイトを先頭バイトと呼び、2 番目のバイトを末尾バイトと呼びます。0xC3 は、文字が 1 バイト 0xA9 でエンコードされていることを意味するメタデータ バイトですが、Unicode 値é0xE9です。

é基本的に、0xE9 ではなく 0xA9 でエンコードされている理由を知りたいです。テキスト エディタは 0xC3A9 から 0xE9 にどのように変換しますか? シフト操作は?

4

1 に答える 1

12

0xC3が「メタデータバイト」であるとあなたが思う理由は何ですか?

UTF-8のすべてのバイトには、エンコードされたコードポイントに関する関連情報が含まれています。

UTF-8でエンコードされたコードポイントの最初のバイトには、コードポイントのエンコードに使用された合計バイト数(*) 実際のコードポイントの最初の数ビットを示すマーカー(先頭の1の数)が含まれます。後続のすべてのバイトには、「継続マーカー」(ビット10)と、エンコードされたコードポイントのさらに6ビットが含まれます。

UTF-8に関するウィキペディアの記事には、プロセスのかなり良い説明があります

コードポイント値を直接使用するエンコーディングがあります。基本的に「コードポイント値を32ビット値として使用する」UTF-32(別名UCS-4)です。

(*)マーカーは実際には非常に簡単です。バイトがで始まる場合(つまり、最上位ビットがそうである場合)0、それはシングルバイトエンコーディングです(つまり、0から127の間のコードポイント)。で始まる場合は10、継続バイトです。の場合1101110または11110その場合は、それぞれ2バイト、3バイト、または4バイトのシーケンスの開始です。以前は同様に定義されていましたが、最新のUTF-8では無効になっています(Unicode標準で使用されないことが保証されている値をエンコードするためにのみ必要なため)1111101111110

于 2012-05-04T11:11:13.413 に答える