php匯出csv檔案亂碼問題解決方案
php匯出csv檔案亂碼問題解決方案
說 這個問題之前首先來說一下什麼是CSV檔案?Comma Separator Value(逗號分隔值)是也。常常用來資料轉換的中間檔案存在,比如:從Mysql中匯出資料到CSV,匯入CSV到SqlServer中。在 Linux下用PHP指令碼從Mysql資料庫中將表的資料按照條件匯出成csv,使用utf-8編碼匯出CSV檔案,開啟后里邊的中文成了亂碼 (Windows下CSV檔案預設與Microsoft Excel關聯),用Notepad++或者Word開啟正常,不過排版很亂。原因:BOM惹的禍,微軟惹的禍。
什麼是BOM?Byte Order Mark(位元序標記)是也。
為 了識別 Unicode 檔案,Microsoft 建議所有的 Unicode 檔案應該以 ZERO WIDTH NOBREAK SPACE字元開頭。這作為一個”特徵符”或”位元組順序標記(byte-order mark,BOM)”來識別檔案中使用的編碼和位元組順序(big-endian或little-endian),具體的對應關係見下表。
?
BytesEncoding Form
| 00 00 FE FF |
UTF-32, big-endian |
| FF FE 00 00 |
UTF-32, little-endian |
| FE FF |
UTF-16, big-endian |
| FF FE |
UTF-16, little-endian |
| EF BB BF |
UTF-8 |
?
類Unix系統中並沒有使用 BOM,因為它會破壞現有的 ASCII 檔案的文法約定。
實現代碼如果
註:在寫csv檔案時確保php源碼是utf-8,並且無BOM,並且沒有輸出任何內容。
BOM實際上挺煩人,如果你的網頁(*.html)有BOM,在IE6.x下面開啟會發現一神奇的空行,Firefox下卻沒有
?
來源:http://www.i-felix.cn/blog/phpdao-chu-csvwen-jian-luan-ma-wen-ti-jie-jue-fang-fa-gai-si-de-wei-ruan
?
?
1 樓 xiaoshenge 2012-09-03
學習了,以前只知道需要把編碼轉換一下,原來還有一種簡單的方法。
2 樓 天梯夢 2012-09-05
是的,編碼轉換有時候不實際!