unicodeとutf 8符号化を徹底的に明らかにする
4288 ワード
文字列エンコーディング
コンピュータは数字しか処理できず、テキストは数字に変換されてから処理できます.コンピュータの中の8 bitは1バイトであるため、1バイトで表すことができる最大の数字は255である. コンピュータはアメリカ人が発明したものです.したがって、1バイトはすべての文字を表すことができるので、ASCII(1バイト)符号化はアメリカ人の標準符号化になります. しかし、ASCIIは中国語を処理するのに明らかに足りない.中国語は255の漢字だけではないので、中国はGB 2312のコードを制定して、2バイトで1つの漢字です.GB 2312にはASCIIも含まれています.同じように、日本語と韓国語も同じです.しかし、標準がますます多くなると、複数の言語が混在して表示される場合、必ず文字化けしてしまいます. はunicodeが現れ、すべての言語をコードに統一した. 乱符号化の問題は解決したが、内容がすべて英語であれば、unicode符号化はASCIIより倍の記憶空間を必要とし、同時に伝送すれば倍の伝送 を必要とする.だから可変長の符号化「utf-8」が現れ、英語を1バイト、漢字を3バイト長くした.特に辺鄙なプログラミングは4-6バイトで、大量の英語を伝送すればutf-8の役割が明らかになる. ASCIIとunicode符号化比較||ASCII符号化|unicode符号化|バイナリ|——————————————————————————————————————||||0100 0001||漢字’のうち「|ASCII符号化の範囲を超えている|20013|01001110 00101101|A unicode||unicode符号化を使用するには、前に0|00000000 0100|0001| を補う必要がある
python 3ではutf-8がデフォルトで符号化されています
python 2ではASCIIがデフォルトで符号化されています
符号化問題はPython 2とPython 3の最大の違いであり、符号化問題を理解することはPythonを本当に把握するのに重要な役割を果たす.
コード発展過程
コード変換
python 3ではutf-8がデフォルトで符号化されています
>>> x = " Python"
>>> x.encode("utf-8")
b'\xe6\x88\x91\xe7\x94\xa8Python'
>>>
>>> import sys
>>> sys.getdefaultencoding()
'utf-8'
>>>
python 2ではASCIIがデフォルトで符号化されています
>>> s = " Python"
>>> s.encode("utf8")
Traceback (most recent call last):
File "" , line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 0: ordinal not in range(128)
>>>
>>> import sys
>>> sys.getdefaultencoding()
'ascii'
>>>
符号化問題はPython 2とPython 3の最大の違いであり、符号化問題を理解することはPythonを本当に把握するのに重要な役割を果たす.