計算機只能處理數字, 文本轉換成數字才能處理, 計算機中8 bit作爲一個字節,一個字節最大的數字就是 255
python2默認ASCII編碼,
python3默認是Unicode編碼
Windows中文地區默認是gb2312
Linux默認爲utf-8
計算機是美國人發明的,一個字節可以表示素有字符,
ASCII處理中文是不夠的,中文不止255個漢字, 所以出現了GB2312編碼, 用兩個字節表示一個漢字. GB2312把ASCII也包含進去了, 同理日文韓文都發展了自身的編碼,標準越來越多,多種語言混合造就了肯定無法兼容的現象
於是Unicode出現了,將所有語言統一到一套編碼裏
但是如果內容全是英文, Unicode編碼比ASCII需要多進一倍的存儲空間, 傳輸也需要多一倍的傳輸
所以就出現了可變長的編碼’utf-8’, 把英文邊長一個字節, 漢字就三個字節,特別生僻的變成4-6字節, 如果傳輸大量的英文, utf8作用就非常明顯了
在python2裏,定義一個字符串最好在前面加u
比如: u’我愛python’ 定義的就是Unicode字節
decode()將當前字符串變成Unicode
encode()將當前unic變成utf-8
一般是先decode(‘自身編碼格式’)在encode(‘utf-8’)
調用encode(‘urf-8’)必須先decode()成Unicode
# python3, 默認爲Unicode,不用decode,直接encode即可
a = '我愛python'
# 將unicode轉換成utf-8
a.encode('utf-8')
# b'\xe6\x88\x91\xe7\x88\xb1python'
# 將utf-8轉換成Unicode,decode指明自身編碼格式
a.decode('utf-8')
# '我愛python'
# python2, 默認ASCII編碼,加u變成Unicode
a = u'我愛python'
# '\xe6\x88\x91\xe7\x88\xb1ptyhon'
# Unicode轉換成utf-8
a.encode('utf-8')
# '\xe6\x88\x91\xe7\x88\xb1ptyhon'
# utf-8轉換成Unicode
a.decode('utf-8')
# u'\u6211\u7231ptyhon'