ASCII、unicode、UTF-8符号化に関するいくつかの見解
2519 ワード
コーディングの詳細
一般的なエンコーディング:
UTF-8
GBK(ANTI、cp936)
ASCII
GB2312
ISO-8859-1
エンコードセットは何ですか?
グラフィックインタフェースに対応する符号化セットを表示するために使用されるが、実際にはグラフィックである.
バイトに対応するパターンは何ですか
1)ASCII:最も早い段階でグラフィックインタフェースを実現する場合,コンピュータ内のバイトに対応する文字セット(128文字)
0 x 00~0 x 7 Fのみ使用
(128文字:2**7=128)
1バイト
2)ISO-8859-1:西欧文字セット
ISO-8859-2、ISO-8859-3、ISO-8859-4もあります.ISO-8859-16
コンピュータがヨーロッパに発展した後、ASCIIコードには彼ら特有の文字が含まれていないことが分かった.
互換ASCIIコード
拡張、0 x 80-0 xFF
1バイト
3)GB 2312:中国語簡体字符号化セット
コンピュータが中国に発展した後、創造された文字セット
2バイト、ASCII対応
すべての2バイトの内容(中国語、全角記号など)は、上位バイトと地位バイトが0 x 7 Fより大きくなければならない.
GBK:繁体字を含む中国語コードセット
2バイト、GB 2312対応
上位バイトが0 x 7 Fより大きいだけで、下位バイトは制限されません
GB18030:
1バイト、2バイト、4バイトの3つの方式で文字を符号化する
互換性GBK
BIG 5:台湾の繁体字中文字セット
2バイト
4)unicode:各言語の各文字に統一された一意のバイナリ符号化が設定されている
通常2~4バイトで1文字を表す
unicodeはすべての言語を1セットの符号化セットに統一し、通常2バイト16ビット、4バイトを使用します.
ASCIIコードも含めて2バイト表示が必要でスペースがもったいない
17個の平面
その中にBMPの基礎平面があり、2バイトで、普通の中国語も2バイトです.
他の16の平面は4バイトです
非互換ASCII
お元気ですか=u 4 f 60u 597 du 554 a
5)UTF-8: UTF-8 、 UTF-16、UTF-32
(長くなる記憶)英語文字は1バイトを使用し、元のasciiコードに沿って
中国語ストレージは通常3バイト使用
可変バイト:1バイト、2バイト、3バイト、4バイト、中国語で3バイト
互換ASCII
1、0 x 80未満、ASCII対応
2、マルチバイト
0 x 7 Fより大きいバイトを1バイト読み、2進数に展開
バイトの上位に連続する1がいくつかあると、何バイトを取る必要があるかを表します.
110*****は2バイトで1文字を表します
1110****は3バイトで1文字を表す
1111 0***は4バイトで1文字を表します
後続のルートバイトは、前の2ビットが10でなければならない.この2ビットは実際の意味がなく、プレースホルダにすぎない.import sys
print (sys.getdefaultencoding())
# python3.6 :utf-8
漢字:中
対応utf-8のバイト:b'xe 4xb 8xad's=" "
print(s.encode("utf-8"))
# :b'\xe4\xb8\xad'
展開:e 4 b 8 ad
e 4 b 8 a d
1110 0100 1011 1000 1010 1101
1バイト目のビット数を表す1110とそれ以降のバイトの上位2ビット10を除く
0100 11 1000 10 1101
8人ごとに接続:
0100 1110 0010 1101
4 e 2 d
対応するunicode符号化は:u 4 e 2 ds=" "
print(s.encode('unicode-escape'))
# :b'\\u4e2d'
import sys
print (sys.getdefaultencoding())
# python3.6 :utf-8
s=" "
print(s.encode("utf-8"))
# :b'\xe4\xb8\xad'
s=" "
print(s.encode('unicode-escape'))
# :b'\\u4e2d'