字是給人看的而計算機只能處理數(shù)字承二。所以針對字需要編碼榆鼠。
那么怎樣將字進行編碼?
首先亥鸠,挖了第一個坑妆够,人們望著鍵盤上的字母、數(shù)字负蚊、符號掐指一算127個數(shù)字神妹。 二進制 2的8次方為 256 戳戳有余,于是乎規(guī)定了 1個二進制位為1個 bit家妆,8個二進制位為一個字節(jié) byte鸵荠,這樣一個 byte 就可以用二進制最大數(shù)11111111 或者十進制最大數(shù)255代表“所有的字”了。
然而伤极,他們忽略了大洋彼岸的大中華蛹找,霓虹姨伤,大朝鮮這些字量巨大的文化大國。本著取資本主義精華的精神各國制定了自己的字編碼GB2312/Shift_JIS/Euc-kr 庸疾。然而問題來了乍楚,隨著亞洲全面崛起,文化不斷交流彼硫,中文+日文+韓文混用就會沖突(雖然日文假名本來就大量漢字).... 就會產生讓程序猿捉狂的亂碼炊豪。
這個時候,世界人民迫切需要一種包羅萬象的編碼拧篮,于是乎Unicode應運而生,怎么辦到的吶牵舱?一個 byte 不夠用串绩,用兩個 byte 嘛,實在不行三個 byte…. 可是那個年代呀芜壁,存儲昂貴礁凡,帶寬昂貴,英文國家白白浪費2倍加的空間呀慧妄,不能為了世界和平而自損三千呀顷牌。那怎么吶? 那就byte 變長唄塞淹。于是乎就變成了英文1個 byte窟蓝,中文3個 byte,生僻字4-6個 byte饱普,順便還兼容了ASCII运挫。其中UTF-8(8-bit Unicode Transformation Format)作為一種針對Unicode的可變長度字符編碼,被廣泛應用套耕,完美收關谁帕。
回到 Python話題,歲月不饒人冯袍,在世界人民統(tǒng)一認識到Unicode才是未來的時候已經是1994年了匈挖。那么91年公開發(fā)布的 Python 自然默認還是沿用了ASCII。 作為變通Python2里所有的非英文都使用了u'...' 代表Unicode字符串康愤。直到2008的 Python3才統(tǒng)一使用Unicode儡循。已是后話。
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
>>> print u'非英文'
非英文
>>> u'非英文'
u'\u975e\u82f1\u6587'
>>> u'非英文'.encode('utf-8')
'\xe9\x9d\x9e\xe8\x8b\xb1\xe6\x96\x87'
>>> '\xe9\x9d\x9e\xe8\x8b\xb1\xe6\x96\x87'.decode('utf-8')
u'\u975e\u82f1\u6587'
>>> print u'\u975e\u82f1\u6587'
非英文
漂亮的分割線
2008年翘瓮,祖國承辦了盛大的奧林匹克運動大會贮折。Python3也邁進了Unicode,從此
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
>>> print("北京歡迎你") # 因為Unicode 所以默認就支持了中文
北京歡迎你
>>> "北京歡迎你".encode('utf-8') # 字符串編碼為字節(jié)流
b'\xe5\x8c\x97\xe4\xba\xac\xe6\xac\xa2\xe8\xbf\x8e\xe4\xbd\xa0'
>>>b'\xe5\x8c\x97\xe4\xba\xac\xe6\xac\xa2\xe8\xbf\x8e\xe4\xbd\xa0'.decode('utf-8') #從字節(jié)流解碼為字符串
'北京歡迎你'
現(xiàn)在资盅,Python 的字符串類型str调榄,在計算機內存中以Unicode表示踊赠,傳輸?shù)骄W(wǎng)絡或者保存到磁盤,需要將str字符串轉成例如encode('utf-8')以字節(jié)為單位的bytes每庆。