0xC3が「メタデータバイト」であるとあなたが思う理由は何ですか?
UTF-8のすべてのバイトには、エンコードされたコードポイントに関する関連情報が含まれています。
UTF-8でエンコードされたコードポイントの最初のバイトには、コードポイントのエンコードに使用された合計バイト数(*) と実際のコードポイントの最初の数ビットを示すマーカー(先頭の1の数)が含まれます。後続のすべてのバイトには、「継続マーカー」(ビット10
)と、エンコードされたコードポイントのさらに6ビットが含まれます。
UTF-8に関するウィキペディアの記事には、プロセスのかなり良い説明があります。
コードポイント値を直接使用するエンコーディングがあります。基本的に「コードポイント値を32ビット値として使用する」UTF-32(別名UCS-4)です。
(*)マーカーは実際には非常に簡単です。バイトがで始まる場合(つまり、最上位ビットがそうである場合)0
、それはシングルバイトエンコーディングです(つまり、0から127の間のコードポイント)。で始まる場合は10
、継続バイトです。の場合110
、1110
または11110
その場合は、それぞれ2バイト、3バイト、または4バイトのシーケンスの開始です。以前は同様に定義されていましたが、最新のUTF-8では無効になっています(Unicode標準で使用されないことが保証されている値をエンコードするためにのみ必要なため)111110
。1111110