UnicodeとUTF-8の違いは何ですか?

2783 ワード

作者:邱昊宇
リンク:https://www.zhihu.com/question/23374078/answer/24385963
出典:知っている
著作権は作者の所有である.商業転載は著者に連絡して許可を得てください.非商業転載は出典を明記してください.
簡単に言えば、
  • Unicodeは「文字セット」
  • UTF-8は「符号化規則」
  • 次のようになります.
  • 文字セット:各「文字」に一意のID(コードビット/コードポイント/コードポイント)
  • を割り当てる.
  • 符号化ルール:「符号ビット」をバイトシーケンスに変換するルール(符号化/復号化は暗号化/復号化のプロセスと理解できる)
  • .
    一般化されたUnicodeは、Unicode文字セットとUTF-8、UTF-16、UTF-32などの符号化ルールを定義する標準である.
    Unicode文字セットは、各文字に1つの符号ビットを割り当て、例えば「知」の符号ビットは30693であり、U+77 E 5(30693の16進数は0 x 77 E 5)と表記される.UTF-8は、その名の通り、8ビットを1つの符号単位とする可変長符号化のセットである.1つの符号ビットは1~4バイト符号化される.
    U+ 0000 ~ U+ 007F: 0XXXXXXX
    U+ 0080 ~ U+ 07FF: 110XXXXX 10XXXXXX
    U+ 0800 ~ U+ FFFF: 1110XXXX 10XXXXXX 10XXXXXX
    U+10000 ~ U+1FFFF: 11110XXX 10XXXXXX 10XXXXXX 10XXXXXX
    

    上の表の符号化規則によると、前の「知」字の符号ビットU+77 E 5は3行目の範囲に属する.
           7    7    E    5    
        0111 0111 1110 0101         77E5
    --------------------------
        0111   011111   100101      77E5
    1110XXXX 10XXXXXX 10XXXXXX   (     )
    11100111 10011111 10100101     
       E   7    9   F    A   5
    

    これがU+77 E 5をUTF-8に従ってバイトシーケンスE 79 FA 5に符号化するプロセスである.逆もまた然り.
    作者:uuspider
    リンク:https://www.zhihu.com/question/23374078/answer/65352538
    出典:知っている
    著作権は作者の所有である.商業転載は著者に連絡して許可を得てください.非商業転載は出典を明記してください.
    例を挙げると、It'sは日報が見たunicode文字セットがこのような符号化テーブルであることを知っています.
    I 0049
    t 0074
    ' 0027
    s 0073
      0020
      77e5
      4e4e
      65e5
      62a5
    

    各文字は16進数に対応します.コンピュータはバイナリしか知らないので、unicodeの方式(UCS-2)に厳格に従って、このように記憶すべきです.
    I 00000000 01001001
    t 00000000 01110100
    ' 00000000 00100111
    s 00000000 01110011
      00000000 00100000
      01110111 11100101
      01001110 01001110
      01100101 11100101
      01100010 10100101
    

    この文字列は全部で18バイトを占めていますが、中国語と英語のバイナリコードを比較すると、英語の上位9ビットが0であることがわかります.浪費しましょう、ハードディスクを浪費して、流量を浪費します.
    どうしよう?
    UTF.
    UTF-8はこうしています.
    1.単バイトの文字、バイトの第1位は0に設定して、英語のテキストに対して、UTF-8コードはただ1バイトを占有して、ASCIIコードと完全に同じです;
    2.nバイトの文字(n>1)、1バイト目の前nビットを1、n+1ビット目を0、後バイトの前2ビットを10とし、このnバイトの残りの空きスペースにはこの文字unicodeコードが埋め込まれ、上位は0で補完される.
    これにより、UTF-8タグビットが形成される.
    0xxxxxxx 110xxxxx 10xxxxxx 1110xxxx 10xxxxxx 10xxxxxx 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx ... ... 「It's知乎日报」は
    I 01001001
    t 01110100
    ' 00100111
    s 01110011
      00100000
      11100111 10011111 10100101
      11100100 10111001 10001110
      11100110 10010111 10100101
      11100110 10001010 10100101
    

    上の案と比較すると、英語は短くなったが、中国語の文字ごとに1バイト多く使われている.しかし、文字列全体は17バイトしか使わず、上の18文字より少し短い.
    次は授業後の宿題です.
    「It's知乎日報」のGB 2312とGBKコード(独自google)をバイナリに変換してください.歴史的要因を考慮せずに、unicodeとUTF-8の大活躍と同時に、GB 2312とGBKが広く使われている理由を技術的に説明してください.劇透:すべてはハードディスクとトラフィックを節約するためです.
    編集は2015-11-04