環境:ubuntu12.04 python2.7 涉及:ascii,utf-8,gbk,gb2312python
首先說下我的處理過程當中遇到的問題:ubuntu
任務是這樣:有大概4000個txt,將他們合併到一個文件裏,而且去掉原文本中的全部回車python2.7
就是 編碼
1.txtspa
aaaa
aaaa
aaaa
2.txtcode
bbbb
bbbb
bbbb
合併成blog
aaaaaaaaaaaa
bbbbbbbbbbbb
看起來很是很是簡單。。。utf-8
可是我就調了大概5個小時,主要緣由是因爲文件的編碼不一致。ci
廢話不說了,開始個人思路unicode
處理中文的基本思路
一,首先肯定處理文件的大概編碼
好比說90%是gb2312,10%是ascii,那麼咱們先把這些文件所有轉換成gb2312格式
這裏須要的是enca
# enconv -L zh_CN -x gb2312 filename
enconv -L zh_CN -x gb2312 文件夾/*.txt
這個過程可能遇到「Unrecognized encoding」的問題,個人處理是找到這些文件直接丟掉,這裏怎麼處理看你的須要了
二,python讀取文件問題
這裏須要瞭解的是python的decode 和 encode
decode:轉碼成python內碼:unicode
encode:轉碼成你須要的
前面已經強制轉換了編碼因此這裏就能夠知道如何decode了
接下就是根據本身的需求encode了
好比你強制轉換成gb2312,最終輸出成utf-8,那就是你先decode('gb2312'),而後encode('utf-8')
這裏我是等輸出再轉碼的content.decode('gb18030','ignore').encode('utf-8') ‘ignore’是忽視出錯的編碼
總之就是要確保每一個流程中的編碼格式能在你控制中
到這基本就能處理問題。
可是,仍是有蛋疼的事就是空格,回車,換行這些問題的,由於空格能夠有不一樣的十六進制表示 咱們一般意義上的回車是「\r\n」,也就是換行,回車,可是有的編碼中卻只有‘\n’
怎麼肯定相似的問題?
三.查看文件的16進製表示
用hexdump這個命令,詳細參數你能夠本身baidu下
hexdump -C 文件
我經過比對正確和錯誤文件的回車
發現正確的是‘\n’ 錯誤的是‘\r\n’
而後加入這個就行了
好吧,其實我就是爲了安慰下個人5個小時bug過程。。。