1.基本概念
字符(Character)是各種文字和符號的總稱,包括各國家文字、標點符號、圖形符號、數字等
字符集(Character set)是多個字符的集合
字符集包括:ASCII字符集、GB2312字符集、GB18030字符集、Unicode字符集等
ASCII編碼是1個字節,而Unicode編碼通常是2個字節。
UTF-8是Unicode的實現方式之一,UTF-8是它是一種變長的編碼方式,可以是1,2,3個字節
2.Python3中的字符串
Python3中兩種字符串類型
1.str:unicode的呈現形式
2.bytes: 字節類型,互聯網上的數據都是以二進制的方式(字節類型)傳輸的
使用方法:
1.str使用encode方法轉化為bytes
2.bytes通過decode轉化為str
注意:編碼方式與解碼方式必須一樣,否則就會出現亂碼
3.Python2中的字符串
Python2中字符串有兩種類型
1.unicode類型
2.字節類型
在Python2中,字符串無法完全地支持國際字符集和Unicode編碼。為了解決這種限制,Python2對Unicode數據使用了單獨的字符串類型。要輸入Unicode字符串,要在第一個引號前加上'u'。
Python2中普通字符串實際上就是已經編碼(非Unicode)的字節字符串
3.1.python2中的字節類型字符串
python2 中定義字符串的時候,會自動將字符串轉換為合適編碼的字節字符串,比如中文:自動轉換為utf-8編碼的字節字符串
舉個例子(linux終端,默認終端的編碼utf-8):
>>> a = "你好" #如此定義字符串的時候,其為字節類型
>>> a
'\xc4\xe3\xba\xc3'
>>> type(a)
<type 'str'>
上面的這種定義方式和在字符串前面加上b的效果一樣,可以對其解碼,轉化為str類型
>>> c =b"你好"
>>> c
'\xe4\xbd\xa0\xe5\xa5\xbd'
>>> type(a)
<type 'str'>
>>> c.decode("utf-8")
u'\u4f60\u597d'
3.2 Python2中的Unicode類型
如果需要定義Unicode字符串,即非字節類型的字符串的時候需要在前面加上‘u’
>>> e = u"你好"
>>> e
u'\u4f60\u597d'
>>> type(e)
<type 'unicode'>
>>> e.encode('utf-8')
'\xe4\xbd\xa0\xe5\xa5\xbd'
3.3 python2中字節類型和uicode類型的轉化
1.字節類型通過decode轉化為Unicode類型
2.Unicode類型通過很encode方法轉化為字節類型
3.方法的使用和Python3相同,但是在方法中默認的編碼解碼方式為ASCII,對中文需要手動指定為utf-8
4.文件編碼
在Python中保存字符串到文件中,文件編碼取決于第一次寫入的字符串編碼,如果后續寫入的字符串編碼和文件編碼不一致時,則出現亂碼(Python寫入文件沒有Unicode編碼的文件編碼)。
4.1 Python3只要是寫入Unicode字符串,都按‘w’模式寫入,除非是 非Unicode(gbk、utf8、jpg、mp4等非Unicode數據),按 "wb" 寫入。
4.2Python2只要是寫入字符串,都按 "w" 模式寫入,除非是 圖片、音頻、視頻這種非字符串數據,按 "wb" 模式寫入。
?