在將模型部署到服務(wù)器上面的時候,遇到了編碼問題溜在,但是代碼在其他的服務(wù)器上面都跑得通陌知。字符編碼一定得搞透徹,本文后續(xù)也會總結(jié)編碼相關(guān)的知識掖肋。然后遇到這個問題之后仆葡,網(wǎng)上的解決辦法如下:
1、最常見的就增加下面代碼(但是這個是針對Python2的):
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
因為這個是針對Python2志笼,在Python3是不好使用了那么肯定就解決不了我們遇到的問題
2沿盅、修改python3安裝目錄下的encoding,采用了下面的命令之后籽腕,就ok了
cd /usr/local/python3.6.5/encodings/
mv ascii.py ascii.py.bak
cp utf_8.py ascii.py
金角大王說很有道理嗡呼,要是不把編碼問題吃透纸俭,那么它肯定會一直糾纏著你皇耗。所以在此小小的總結(jié)一下編碼問題。
一揍很、ACSII與編碼
首先明確計算機只能讀二進(jìn)制0和1郎楼,我們處理字符問題的時候万伤,需要將字符轉(zhuǎn)換成計算機能夠讀懂的二進(jìn)制。這里就需要將文字轉(zhuǎn)為十進(jìn)制呜袁,然后再將十進(jìn)制轉(zhuǎn)換為二進(jìn)制敌买,這樣的話計算機就能理解了。由于計算機早期是美國發(fā)明的阶界,最開始有127個字母(包括了一些在數(shù)字虹钮、大小寫字母和一些符號)被編碼到了計算機里面。所以我們從ASCII表一里面可以看出膘融,A所對應(yīng)的編碼是65芙粱,z的編碼是122。根據(jù)這個十進(jìn)制氧映,我們就能轉(zhuǎn)為二進(jìn)制春畔,讓計算機讀懂了。
二、各類編碼
雖然ASCII碼能夠表示英語湾盗,但是我們沒有見到我們動感的中文伏蚊、也沒有見到牛日語、韓語格粪、泰語等等躏吊。那么要讓我們的計算機能夠讀懂不同的語言,各個國家肯定會編制自己所有的一張表帐萎,來將自己的語言給轉(zhuǎn)換成二進(jìn)制比伏,讓計算機給讀懂,下面羅列一下一些國家的編碼表:
國家 | 編碼表 | 所占字節(jié) | 支持字?jǐn)?shù) |
---|---|---|---|
美國 | ASCII | 1 | 255 |
中國 | GB2312 | 2 | 支持6700+漢字 |
中國 | GBK | 支持21000+漢字 | |
日本 | Shift-JIS | ||
韓國 | ks_c_5601-1987 |
出現(xiàn)了多國的編碼之后疆导,就出現(xiàn)了亂碼的問題赁项。為了解決亂碼的問題,那么就出現(xiàn)了萬國碼(unicode),Unicode編碼將所有的語言編碼到了一張表里面悠菜,那么這個表就能表示所有的語言了舰攒。Unicode 2-4字節(jié) 已經(jīng)收錄136690個字符,并還在一直不斷擴張中悔醋。
但是這里Unicode編碼是有問題的摩窃,也就是如果全部采用英文的話,用Unicode寫的比ASCII要多占一倍的空間芬骄,無論是在傳輸上還是在空間上猾愿,都劃不來。這里的意思就是Unicode的定長的編碼账阻,然后我們采用可變長的編碼方式就能解決占用空間的問題匪蟀。這個時候就出現(xiàn)了UTF(Unicode Transformation Format)。
編碼 | 備注 |
---|---|
UTF-8 | 使用1宰僧、2材彪、3、4個字節(jié)表示所有字符琴儿;優(yōu)先使用1個字符段化、無法滿足則使增加一個字節(jié),最多4個字節(jié)造成。英文占1個字節(jié)显熏、歐洲語系占2個、東亞占3個晒屎,其它及特殊字符占4個 |
UTF-16 | 使用2喘蟆、4個字節(jié)表示所有字符;優(yōu)先使用2個字節(jié)鼓鲁,否則使用4個字節(jié)表示 |
UTF-32 | 使用4個字節(jié)表示所有字符蕴轨; |
三、編碼的轉(zhuǎn)換
四骇吭、各種報錯
持續(xù)更新中....
參考資料:
1橙弱、https://blog.csdn.net/zzyzenith/article/details/84779537
2、https://www.cnblogs.com/alex3714/articles/7550940.html
3燥狰、http://www.cnblogs.com/linhaifeng/articles/5950339.html