# -*- coding: utf-8 -*-字符編碼是啥?
在弄清楚字符編碼是啥之前我們要先考慮一個問題。如果計算機(jī)最基礎(chǔ)的就是0和1,那么他們是如何識別我們輸入的英文字母和數(shù)字的。
下面是數(shù)學(xué)知識,我們現(xiàn)代人常用的計數(shù)方式是十進(jìn)制,就是從1數(shù)到9如果再數(shù)一個數(shù)前面就進(jìn)以為成為10.計算機(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ì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ī)輸入英文了。

通過上面的表讓我們認(rèn)識到,變成本質(zhì)上就是英文和數(shù)學(xué)的結(jié)合產(chǎn)物。
當(dāng)我們弄清楚計算機(jī)數(shù)學(xué)和英語的關(guān)系之后,我們再來說字符編碼,說白了字符編碼就是類似上面的表,上面的表示ascii表,為了更好的表示字符,還有很多比較強(qiáng)大的表。我們在使用記事本,word等文本編輯程序的時候,就會使用到這些字符表。
有一種字符編碼叫做GBK,這個是中文字符集,這個字符集和ascii的表感覺差不多,但是由于漢子比較復(fù)雜,所以有些漢子內(nèi)容需要通過一個公式來計算。
好吧我也不知道這個公式表達(dá)的是什么。
一般GBK只在中文軟件程序中使用,如果在英文軟件程序環(huán)境下,程序不能解析GBK那么程序就會出現(xiàn)亂碼。
為了保證所有的程序環(huán)境都可以正常顯示文字,就出現(xiàn)了UTF-8。這個字符編碼可以很好的兼容中文英文,python默認(rèn)就會讀取UTF-8字符編碼的文件。
那我們?nèi)绾卧O(shè)置字符編碼?
如果你和我一樣的文本編輯器可以在菜單中找到這個選項,然后你發(fā)現(xiàn)有很多字符編碼可以選擇。

除此之外,我們還可以使用下面這行代碼來讓python使用utf-8的模式來讀取這個文件。
# -*- coding: utf-8 -*-

就是告訴python我的文件要用utf-8字符集來解析。
在未來的變成當(dāng)中,html,java都會遇到很多字符編碼的問題,一般文字出現(xiàn)亂碼都是字符編碼的問題。