2012-02-20 2 views
13

私はUTF-8エンコーディングで(継続のための)「継続バイト」が何であるかを調べようとしています。UTF-8継続バイト

ウィキペディアは、いずれかの有用な情報は戻されません全て

Google検索でそれを定義せずにUTF-8 articleでこの用語を紹介します。私は公式仕様に飛びこうとしていますが、最初に高レベルの要約を読むことが望ましいでしょう。

+0

誰かがウィキペディアの記事を編集したようです。 (: – tripleee

答えて

30

UTF-8の継続バイトは、上位2ビットが10である任意のバイトです。

これらは、マルチバイトシーケンスの後続バイトです。次の表は、役立つことがあります。

ここ
Unicode code points Range Encoding Binary value 
------------------- -------- -------------------------- 
U+000000-U+00007f 0xxxxxxx 0xxxxxxx 

U+000080-U+0007ff 110yyyxx 00000yyy xxxxxxxx 
        10xxxxxx 

U+000800-U+00ffff 1110yyyy yyyyyyyy xxxxxxxx 
        10yyyyxx 
        10xxxxxx 

U+010000-U+10ffff 11110zzz 000zzzzz yyyyyyyy xxxxxxxx 
        10zzyyyy 
        10yyyyxx 
        10xxxxxx 

あなたはUnicodeコードポイントはUTF-8マルチバイトバイト配列、及びそれらと同等のバイナリ値にマッピングする方法を見ることができます。

基本的なルールはこれです:それは11で始まる場合

  1. バイトは0ビットで始まる場合、それは128未満
  2. シングルバイトの値ですが、それはマルチの最初のバイトです開始時の1ビットの数は合計で何バイトあるかを示します(110xxxxxは2バイトあり、1110xxxxには3があり、11110xxxには4があります)。
  3. 10で始まる場合、それは継続バイトです。

この区別は、そのコードポイントの最初のバイトを見つけるために、配列にから任意バイトをバックアップすることができるように、非常に便利な処理を可能にします。 ビットで始まらないものが見つかるまで、逆方向に検索してください。

同様に、UTF-8 strlenには、10xxxxxxバイトを数えて使用することもできます。

+0

これはちょっとしたストレッチ/オーバーブローイングだと思うけど...とにかく便利な情報が入っている!私が理解できないことは、なぜ「11」が必要なのかということです。 '0'、連続するもの(任意に多数あります)は' 1'で始まります。 –

+0

@ΈρικΚωνσταντόπουλος "先頭のバイトは' 0'_で始まります - これは正しくありません。 「0」で始まるバイトはシングルバイトコードポイントなので、_リーディングバイトでも継続でもありません。それは一人で立つ。これが '11'で始まるバイトと区別されます。これは、_sequence_の最初のバイトであり、単一のコードポイントを表すためにさらに多くのバイトが続くことを示しています。 –

+0

@WilliamPrice Dunnoなぜ私はその話題以外のコメントを投稿しましたが、私自身のエンコーディングを発明しようとしていたと思います。 –

0

つまり、継続バイトは、最初のバイトまたは1バイトを除くバイトです。 UTF-8では、継続バイトは0x10で開始されます。

+0

引用を追加すると、私はdownvoteを削除します。 –

0

「継続バイト」は用語ではなく通常の英語の単語であり、用語「バイト」です。疑似用語として使用されると、読者を混乱させる可能性があります。

ユニコード標準では、この表現を1つの場所、Ch. 5の5.22節でのみ使用しています。たとえば、「有効な継続バイトにできないバイトが続く4バイトUTF-8シーケンスの最初の3バイト: "この文脈では、意味は明らかです。それは何かを続けるバイト、すなわち一連のバイトです。

ウィキペディアのページでは、文字のエンコードされた形式の最初のバイトを除いて、UTF-8エンコーディングの任意のバイトを意味するように「継続バイト」が使用されているようです。

関連する問題