119

Unicode 標準には十分なコードポイントがあり、それらをすべて格納するには 4 バイトが必要です。それが UTF-32 エンコーディングの機能です。しかし、UTF-8 エンコーディングでは、「可変幅エンコーディング」と呼ばれるものを使用して、これらをより小さなスペースに圧縮しています。

実際、US-ASCII の最初の 127 文字を実際の ASCII とまったく同じように 1 バイトで表すことができるため、何もせずに多くの ASCII テキストを UTF-8 であるかのように解釈できます。巧妙なトリック。それで、それはどのように機能しますか?

私はここで自分の質問をして答えます. さらに、私が間違っている場合は、誰かが私を修正できるかもしれません。

4

3 に答える 3

136

各バイトは、それがシングル バイト コード ポイント、マルチバイト コード ポイント、またはマルチバイト コード ポイントの続きであるかどうかを示すいくつかのビットで始まります。このような:

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

最初の数ビットでどのようなバイトを見ているかがわかるため、どこかで何かが壊れても、シーケンス全体が失われることはありません。

于 2009-10-09T13:04:17.413 に答える
10

RFC3629-ISO 10646の変換形式であるUTF-8がここでの最終的な権限であり、すべての説明があります。

要するに、単一文字を表すUTF-8でエンコードされた1〜4バイトのシーケンスの各バイトのいくつかのビットは、それが後続バイトであるか先行バイトであるか、およびそうである場合は何バイト続くかを示すために使用されます。残りのビットにはペイロードが含まれています。

于 2009-10-09T13:26:56.033 に答える
4

UTF-8 は、8 ビット バイトを使用して、Unicode コード ポイントの文字列 (魔法の U+ 番号) をメモリに格納するための別のシステムでした。UTF-8 では、0 ~ 127 のすべてのコード ポイントが 1 バイトに格納されます。128 以上のコード ポイントのみが 2、3、実際には最大 6 バイトを使用して格納されます。

すべてのソフトウェア開発者が絶対に、積極的に Unicode と文字セットについて知っておく必要がある絶対最小値 (言い訳はありません!)からの抜粋

于 2009-10-09T13:15:22.100 に答える