2012-05-04 27 views
4

文字にéを書き込んで、16進エディタで開くと、0xC3,0xA9バイトが表示されます。文字éがUTF-8で0xC3 0xA9としてエンコードされているのはなぜですか?

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

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

答えて

12

あなたは0xC3が「メタデータバイト」だと思いますか?

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

UTF-8でエンコードされたコードポイントの最初のバイトは、実際の(*)最初の数ビットのコードポイントを符号化するために使用されるバイトの総数を示すマーカー(先行1の数)が含まれコードポイント。末尾のすべてのバイトには、「継続マーカー」(ビット10)とコード化されたコードポイントの6ビットが含まれます。

UTF-8に関するWikipediaの記事はa pretty good description of the processです。

直接コードポイント値を使用して符号化あり:UTF-32(別名UCS-4)は、基本的(*)

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

+0

なぜ、文字 'é'はUTF-8で0xC3 0xA9としてエンコードされていますか? –

+0

http://stackoverflow.com/a/4177813/107158では、UTF-8バイト0xC3A9を文字 'é'にマッピングする方法について説明しています。 –

関連する問題