亂碼根源:
- 本地內存中編碼方式都是“Unicode”,這是系統自動設定的!
- 而在本地硬盤(保存到文件中)編碼方式,是要設定的,而且為了“最高性價比”,多要設定為utf-8;
- 網絡中是各種各樣的編碼方式,拉取到本地,會自動“解釋”為Unicode,在控制臺輸出,這些都還是在內存中;
- 即使以UTF-8編碼方式保存文件到本地,當讀取的時候,本地也只會把文件當做基本的編碼方式,如gbk,所以,仍然要編碼為UTF-8,再交給本地自動轉換為Unicode!
總結:
在計算機的世界,Unicode是“普通話”,其他的,像UTF-8、gbk什么的都是方言,而有的方言還解釋不成普通話(因為有的方言,如gbk,太有“地方特色”,一些“俚語”在普通話里不能“寫出來”,表達的含義,可意會不可言傳 ),所以計算機會“說錯話”,畢竟計算機還只是個機器,它只認普通話;同時,這個機器還蠻自動化的,會自動將方言轉換為普通話,而在一些“認不出來”的情況下,就直接報錯了,所以,如果出錯的時候將自己想要講的話轉換(編譯)為其它方言就行了,系統會再識別一次!
在Python中,有常用三套編碼方式:
- ASCII:一個字節(byte),也就是8個比特(二進制八位),只能代表128個英文字符
- Unicode:兩個字節(byte),及其特殊的會有三到四個,可以認為,這套編碼方式包含了這個世界所有的字符
- UTF-8 :可變長字節,也就是說,如果一個字符用一個字節就能表示(如英文),就用一個;而必須用三個字節才能表示(如中文)就用兩個
三套編碼方案的優缺點:
- ASCII
優點:比較節約資源,只用一個字節
缺點:能表示的字符只有英文,所以其他國家人民就不能“說話了”! - Unicode
優點:包含了這個世界上所有的字符(基本可以這么認為),每個人都有“說話的權利”
缺點:太浪費資源,無論高矮胖瘦,都能裝下,那這個“容器”就只能“將就”最高最胖的那個,所以“瘦子”就“節約”了好多空間 @_@ - UTF-8
優點:為每種語言“個性化定制”容器,性價比高,所以在網絡傳輸中常用UTF-8
缺點:。。。。。。