どのようにUTF-8「可変幅のエンコーディング」機能するのですか?
-
20-09-2019 - |
質問
Unicode標準は、あなたがそれらをすべて保存するために4バイトが必要であること、それには十分なコードポイントを持っています。これは、UTF-32エンコーディングが何をするかです。しかし、UTF-8エンコーディングは何とか「マルチバイト文字」と呼ばれるものを使用してはるかに小さいスペースにこれらを絞り出します。
実際には、それはまさに本物のASCIIのように見えるだけで1バイトでUS-ASCIIの最初の127個の文字を表現するために管理し、それはそれに何もせずにUTF-8であるかのように、あなたはASCIIテキストの多くを解釈することができます。巧妙なトリック。だから、どのように動作しますか?
私が尋ねると、私はちょうどそれを把握するために読んだのビットがやったと私はそれが他の誰かにいくつかの時間を節約するかもしれないと思ったので、ここで自分の質問に答えるつもりです。私はそれのいくつかが間違って持っている場合はプラス多分誰かが私を修正することができます。
解決
各バイトは、それが単一バイト・コード・ポイント、マルチバイト・コード・ポイント、またはマルチバイト・コード・ポイントの継続のかどうかを教えてくれ少ないビットで始まります。このように:
0xxx xxxx A single-byte US-ASCII code (from the first 127 characters)
マルチバイト・コード・ポイントそれぞれは、基本的に言って、いくつかのビットで始まり、「ねえ、あなたも私は何を把握する(または2、または3)次のバイトを読み込む必要があります。」彼らは、次のとおりです:
110x xxxx One more byte follows
1110 xxxx Two more bytes follow
1111 0xxx Three more bytes follow
最後に、これらすべてのスタートコードに続くバイトは、次のようになり
10xx xxxx A continuation of one of the multi-byte characters
あなたが最初の数ビットから見ているバイトの種類を伝えることができるので、、その後、何かがどこかでマングルなっても、あなたは全体のシーケンスを失うことはありません。
他のヒント
RFC3629 - UTF-8、ISO 10646 のの変換フォーマットは、ここでは、最終的な権威であるとすべての説明があります。
要するに、単一の文字を表すUTF-8でエンコードされた1対4バイトシーケンスの各バイトのいくつかのビットは、それが後続バイト、先頭バイトだかどうかを示すために使用され、そうであれば、どのように多くのバイトが続きます。残りのビットは、ペイロードが含まれています。
UTF-8は、記憶するための別のシステムであっ Unicodeコードポイントのあなたの文字列、 これらのマジックU +数字、メモリ内の 8ビットバイトを使用。 UTF-8では、すべての 0〜127のコードポイントがに格納されています シングルバイト。唯一のコード・ポイント128と 上記実際に、2、3を使用して格納され、 最大6バイトます。
絶対最小すべてのソフトウェア開発noreferrer">