UnicodeとUTF-8の違いは何ですか?
作者:邱昊宇
リンク: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+77 E 5は3行目の範囲に属する.
これがU+77 E 5をUTF-8に従ってバイトシーケンスE 79 FA 5に符号化するプロセスである.逆もまた然り.
作者:uuspider
リンク:https://www.zhihu.com/question/23374078/answer/65352538
出典:知っている
著作権は作者の所有である.商業転載は著者に連絡して許可を得てください.非商業転載は出典を明記してください.
例を挙げると、It'sは日報が見たunicode文字セットがこのような符号化テーブルであることを知っています.
各文字は16進数に対応します.コンピュータはバイナリしか知らないので、unicodeの方式(UCS-2)に厳格に従って、このように記憶すべきです.
この文字列は全部で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知乎日报」は
上の案と比較すると、英語は短くなったが、中国語の文字ごとに1バイト多く使われている.しかし、文字列全体は17バイトしか使わず、上の18文字より少し短い.
次は授業後の宿題です.
「It's知乎日報」のGB 2312とGBKコード(独自google)をバイナリに変換してください.歴史的要因を考慮せずに、unicodeとUTF-8の大活躍と同時に、GB 2312とGBKが広く使われている理由を技術的に説明してください.劇透:すべてはハードディスクとトラフィックを節約するためです.
編集は2015-11-04
リンク:https://www.zhihu.com/question/23374078/answer/24385963
出典:知っている
著作権は作者の所有である.商業転載は著者に連絡して許可を得てください.非商業転載は出典を明記してください.
簡単に言えば、
一般化された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