7

UTF-8 でエンコードされた Unicode 文字列が与えられた場合、これはメモリ内の単なるバイトです。

コンピュータがこれらのバイトを対応する Unicode コードポイント (数字) に変換したい場合、ある文字がどこで終わり、別の文字がどこで始まるかをどのように知ることができますか? 1 バイトで表される文字もあれば、最大 6 バイトで表される文字もあります。だからあなたが持っているなら

00111101 10111001

これは 2 文字または 1 文字を表すことができます。コンピューターはどのようにそれを正しく解釈するかを決定しますか? 現在の文字が使用するバイト数などを最初のバイトから知ることができる、ある種の規則はありますか?

4

1 に答える 1

14

マルチバイト シーケンスの最初のバイトは、先頭の 1 ビットの数でシーケンスの長さをエンコードします。

  • 0xxxxxxxそれ自体がキャラクターです。
  • 10xxxxxxマルチバイト文字の続きです。
  • 110xxxxx2 バイト文字の最初のバイトです。
  • 1110xxxx3 バイト文字の最初のバイトです。
  • 11110xxx4 バイト文字の最初のバイトです。

先行する 1 ビットが 4 つを超えるバイトは、UTF-8 で有効な文字をエンコードしません。これは、4 バイト シーケンスが既に U+0000 から U+10FFFF までの Unicode 範囲全体をカバーしているためです。

したがって、質問で提示された例には、1 つの ASCII 文字と、文字を単独でエンコードしない 1 つの継続バイトがあります。

于 2013-03-28T17:41:43.957 に答える