亂碼根源:
- 本地內(nèi)存中編碼方式都是“Unicode”体斩,這是系統(tǒng)自動(dòng)設(shè)定的梭稚!
- 而在本地硬盤(保存到文件中)編碼方式,是要設(shè)定的硕勿,而且為了“最高性價(jià)比”哨毁,多要設(shè)定為utf-8枫甲;
- 網(wǎng)絡(luò)中是各種各樣的編碼方式源武,拉取到本地扼褪,會(huì)自動(dòng)“解釋”為Unicode,在控制臺(tái)輸出粱栖,這些都還是在內(nèi)存中话浇;
- 即使以UTF-8編碼方式保存文件到本地,當(dāng)讀取的時(shí)候闹究,本地也只會(huì)把文件當(dāng)做基本的編碼方式幔崖,如gbk,所以渣淤,仍然要編碼為UTF-8赏寇,再交給本地自動(dòng)轉(zhuǎn)換為Unicode!
總結(jié):
在計(jì)算機(jī)的世界,Unicode是“普通話”价认,其他的嗅定,像UTF-8、gbk什么的都是方言用踩,而有的方言還解釋不成普通話(因?yàn)橛械姆窖郧耍鏶bk,太有“地方特色”脐彩,一些“俚語”在普通話里不能“寫出來”碎乃,表達(dá)的含義,可意會(huì)不可言傳 )惠奸,所以計(jì)算機(jī)會(huì)“說錯(cuò)話”,畢竟計(jì)算機(jī)還只是個(gè)機(jī)器梅誓,它只認(rèn)普通話;同時(shí)佛南,這個(gè)機(jī)器還蠻自動(dòng)化的证九,會(huì)自動(dòng)將方言轉(zhuǎn)換為普通話,而在一些“認(rèn)不出來”的情況下共虑,就直接報(bào)錯(cuò)了愧怜,所以,如果出錯(cuò)的時(shí)候?qū)⒆约合胍v的話轉(zhuǎn)換(編譯)為其它方言就行了妈拌,系統(tǒng)會(huì)再識(shí)別一次拥坛!
在Python中,有常用三套編碼方式:
- ASCII:一個(gè)字節(jié)(byte)尘分,也就是8個(gè)比特(二進(jìn)制八位)猜惋,只能代表128個(gè)英文字符
- Unicode:兩個(gè)字節(jié)(byte),及其特殊的會(huì)有三到四個(gè)培愁,可以認(rèn)為著摔,這套編碼方式包含了這個(gè)世界所有的字符
- UTF-8 :可變長(zhǎng)字節(jié),也就是說定续,如果一個(gè)字符用一個(gè)字節(jié)就能表示(如英文)谍咆,就用一個(gè)禾锤;而必須用三個(gè)字節(jié)才能表示(如中文)就用兩個(gè)
三套編碼方案的優(yōu)缺點(diǎn):
- ASCII
優(yōu)點(diǎn):比較節(jié)約資源,只用一個(gè)字節(jié)
缺點(diǎn):能表示的字符只有英文摹察,所以其他國(guó)家人民就不能“說話了”恩掷! - Unicode
優(yōu)點(diǎn):包含了這個(gè)世界上所有的字符(基本可以這么認(rèn)為),每個(gè)人都有“說話的權(quán)利”
缺點(diǎn):太浪費(fèi)資源供嚎,無論高矮胖瘦黄娘,都能裝下,那這個(gè)“容器”就只能“將就”最高最胖的那個(gè)克滴,所以“瘦子”就“節(jié)約”了好多空間 @_@ - UTF-8
優(yōu)點(diǎn):為每種語言“個(gè)性化定制”容器逼争,性價(jià)比高,所以在網(wǎng)絡(luò)傳輸中常用UTF-8
缺點(diǎn):劝赔。氮凝。。望忆。罩阵。。