這篇(http://www.linuxidc.com/Linux/2011-08/40394p2.htm)敘述了用fgets的方法來代替fgetcsv讀取csv文件,後來發現,如果不使經過處理而直接代替,還是有問題:著實讓我郁悶了很久啊。
首先,fgetcsv在處理的時候,會正確的處理一行中的內容,就算我行中含有換行符和,,都可以處理掉,正確的解析出來。而如果用fgets,那麼這些都需要自己做,當然網上也給出了一個重寫fgetcsv的方法,當然用的使正則,這個效率上需要斟酌啊。
但是fgetcsv卻有個問題,就如我上一篇中提到的,地區的設置,當然setlocale(LC_ALL, 'zh_CN');事實證明是可以解決的,但是這個是在我WIN下測試的情況下。當我轉移到Ubuntu來測試的時候,悲劇發生了。
雖然我的ubuntu系統使中文的系統,可是用的local是zh_CN.UTF8的,並沒有zh_CN.GBK的,於是乎,中文字不能解析的情景再次上演了。
當然前輩的肩膀總是偉大的,在互聯網的推動下,一切都有辦法解決。
我先是更新了下語言包,系統->管理->語言支持。第一次打開的時候提示我沒有安裝完全,需要升級,於是我升級了,可是在命令行中查看locale -a的時候,仍然沒有zh_CN:
www.linuxidc.com@ubuntu:/usr/www/GBKHost/test$ locale -a
C
POSIX
zh_CN.utf8
zh_HK.utf8
zh_SG.utf8
zh_TW.utf8
於是我這樣做:
1、修改local文件,添加zh_CN支持:
sudo vi /var/lib/locales/supported.d/local
在第一行前插入一行zh_CN 為了萬一,我也插入了zh_CN.GBK GBK這行
保存。
2、設置支持包
sudo locale-gen zh_CN
sudo locale-gen zh_CN.GBK
3、 再次運行locale -a
www.linuxidc.com@ubuntu:/usr/www/GBKHost/test$ locale -a
C
POSIX
zh_CN
zh_CN.gb2312
zh_CN.gbk
zh_CN.utf8
zh_HK.utf8
zh_SG.utf8
zh_TW.utf8
終於有了。
再次去運行下csv導入頁面(當然含有setlocale(LC_CTYPE, 'zh_CN')操作了),成功!