上次經歷了一次php csv 輸出亂碼,以為已經能解決了一切問題,但開心得太早了。今天用phpexcel 類讀取一個xlsx 文件,裏面文字比較特別,夾雜著繁體和簡體字,所以一定要用unicode。一讀取,發現亂碼,怎麼回事?之前未發生此情況。
開始排除問題,之前因為已經寫好,所以這次很有信心沒測試直接mysql_query 到數據庫中!慘!很多亂碼,一萬多條要刪除,所以整個數據庫直接刪除(早已經備份了)。
測試一,BOM問題,之前發生亂碼是文件有BOM問題,全部改一次,發現情況一致。
測試二,下載phpexcel 測試文件,直接讀取文件,發現也是亂碼,怎麼辦?
測試三,開始懷疑讀取的文件有問題,一個xlsx 會有甚麼問題呢?於是開啟文件,把它另存成xls,然後再讀取一次,亂碼消失了=.=
發現到是格式問題,然後上網谷哥一下,原來還有不少人討論,元兇和office 2007 有很大關係,今天就不多寫,把這些討論的資料搬上來給大家去參考,解決方法就是:
在寫入csv是,要加入BOM!
參考資料:
http://blog.darkthread.net/post-2009-09-06-csv-encoding-again.aspx
http://blog.roodo.com/rocksaying/archives/1096340.html