文章出處

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


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()