Python對中文字符的處理(utf-8/ gbk/ unicode) 轉載
轉載自:http://blog.csdn.net/chixujohnny/article/details/51782826
文件第一行永遠默認
# coding: utf-8
1.什么是utf-8/ gbk/ unicode編碼
我就通俗易懂的講解一下吧,講的復雜了肯定是沒人看的
utf-8是Unix下的一種通用編碼,可以對漢字編碼,應該是Unix環境下能打開看到漢字的唯一編碼(gbk試過,亂碼)
gbk是windows環境下的一種漢字編碼,其中GB2312編碼也算是gbk編碼,這種編碼在Unix環境中打開是亂碼,大概是這個樣子:
可以看到,英文正常顯示,但是漢字呢就gg了,一般看到這種跟個蛋一樣的字符就是gbk漢字(只在mac中試過,別的Unix不知道是不是個蛋)
unicode是一種二進制編碼,所有的utf-8和gbk編碼都得通過unicode編碼進行轉譯,說的直白一點,utf-8和gbk編碼之間不能直接轉換,要在unicode之間過個場才能轉換。
下面我圖解一下,方便理解:
而在mac環境下pycharm只能顯示unicode的漢字,舉個例子:
# coding:utf-8 s = '我是一串漢字' print s
首先,s是一串utf-8編碼的漢字,在print的時候,先把utf-8轉化成unicode再輸出成顯示的漢字。
2.如何查看文檔、字符串編碼格式
先安裝chardet模塊
pip install chardet
# coding:utf-8 import chardet s = '哈哈哈我就是一段測試的漢字呀' print chardet.detect(s)
輸出:{'confidence': 0.99, 'encoding': 'utf-8'}
這個辦法只能輸出這段字符可能的編碼格式,我們看到0.99的可能是utf-8,其實也就是utf-8編碼了,只要字符串夠長,后面的置信度都是0.99
當然也可以用file命令
file -i mssql.py mssql.py: text/x-java; charset=utf-8
3.各種編碼之間如何轉換
python中有兩個很好用的函數 decode() 和 encode()
decode(‘utf-8’) 是從utf-8編碼轉換成unicode編碼,當然括號里也可以寫'gbk'
encode('gbk') 是將unicode編碼編譯成gbk編碼,當然括號里也可以寫'utf-8'
假如我知道一串編碼是用utf-8編寫的,怎么轉成gbk呢
s.decode('utf-8').encode('gbk')
圖解一下:
4.我為什么要把編碼轉來轉去
在使用NLPIR分詞的時候,對輸入文檔的編碼格式是有嚴格要求的,在函數初始化的時候可以設置輸入源文檔的編碼格式。
但是源文檔的編碼可能一會兒是utf-8一會兒是gbk,這就要求統一一下格式,不能格式一亂就報錯了,
具體操作我后面會寫一篇python調用NLPIR的說明
centos6系統的系統編碼
cat /etc/sysconfig/i18n
LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"
mysql的my.cnf
character_set_server = utf8mb4
default_character_set = utf8
SQL Server2014的字符編碼,SQL Server沒有UTF8這種字符編碼的說法,只有排序規則
char數據類型是字符集CP936的GBK代碼
nchar、nvarchar數據類型是Unicode字符集
如有不對的地方,歡迎大家拍磚o(∩_∩)o
文章列表