# -*- coding: utf-8 -*-字符編碼是啥苟弛?
在弄清楚字符編碼是啥之前我們要先考慮一個問題腐魂。如果計(jì)算機(jī)最基礎(chǔ)的就是0和1,那么他們是如何識別我們輸入的英文字母和數(shù)字的后控。
下面是數(shù)學(xué)知識狂窑,我們現(xiàn)代人常用的計(jì)數(shù)方式是十進(jìn)制,就是從1數(shù)到9如果再數(shù)一個數(shù)前面就進(jìn)以為成為10.計(jì)算機(jī)最基礎(chǔ)的就是二進(jìn)制染厅,0和1數(shù)到1再網(wǎng)上書就進(jìn)一位痘绎。二進(jìn)制和十進(jìn)制是可以互相轉(zhuǎn)換的。比如二進(jìn)制10就是十進(jìn)制數(shù)字2.計(jì)算機(jī)通過二進(jìn)制可以給十進(jìn)制進(jìn)行編碼糟秘。除此之外二進(jìn)制還可以轉(zhuǎn)換成八進(jìn)制和十六進(jìn)制简逮。通過這些數(shù)學(xué)轉(zhuǎn)換,我們可以創(chuàng)建一個集合尿赚∩⑹可以理解成可以通過二級制,八進(jìn)制凌净,十進(jìn)制悲龟,十六進(jìn)制的數(shù)學(xué)關(guān)系創(chuàng)建一張對應(yīng)表。
就像下圖一樣冰寻。dec是十進(jìn)制须教,HX是十六進(jìn)制 Oct是八進(jìn)制。每一個數(shù)字都可以對應(yīng)一個字符,比如字母和數(shù)字轻腺。這樣我們就可以向計(jì)算機(jī)輸入英文了乐疆。
通過上面的表讓我們認(rèn)識到,變成本質(zhì)上就是英文和數(shù)學(xué)的結(jié)合產(chǎn)物贬养。
當(dāng)我們弄清楚計(jì)算機(jī)數(shù)學(xué)和英語的關(guān)系之后挤土,我們再來說字符編碼,說白了字符編碼就是類似上面的表误算,上面的表示ascii表仰美,為了更好的表示字符,還有很多比較強(qiáng)大的表儿礼。我們在使用記事本咖杂,word等文本編輯程序的時候,就會使用到這些字符表蚊夫。
有一種字符編碼叫做GBK诉字,這個是中文字符集,這個字符集和ascii的表感覺差不多知纷,但是由于漢子比較復(fù)雜奏窑,所以有些漢子內(nèi)容需要通過一個公式來計(jì)算。
[(GBKH-0x81)*0xBE+(GBKL-0x41)]*(漢字離散后每個漢字點(diǎn)陣所占用的字節(jié))
好吧我也不知道這個公式表達(dá)的是什么屈扎。
一般GBK只在中文軟件程序中使用,如果在英文軟件程序環(huán)境下撩匕,程序不能解析GBK那么程序就會出現(xiàn)亂碼鹰晨。
為了保證所有的程序環(huán)境都可以正常顯示文字,就出現(xiàn)了UTF-8止毕。這個字符編碼可以很好的兼容中文英文模蜡,python默認(rèn)就會讀取UTF-8字符編碼的文件。
那我們?nèi)绾卧O(shè)置字符編碼扁凛?
如果你和我一樣的文本編輯器可以在菜單中找到這個選項(xiàng)忍疾,然后你發(fā)現(xiàn)有很多字符編碼可以選擇。
除此之外谨朝,我們還可以使用下面這行代碼來讓python使用utf-8的模式來讀取這個文件卤妒。
# -*- coding: utf-8 -*-
就是告訴python我的文件要用utf-8字符集來解析。
在未來的變成當(dāng)中字币,html则披,java都會遇到很多字符編碼的問題,一般文字出現(xiàn)亂碼都是字符編碼的問題洗出。