發新話題

[分享] 解決Microsoft Excel CSV檔亂碼(utf-8亂碼)

解決Microsoft Excel CSV檔亂碼(utf-8亂碼)

以往解決web編碼問題的方式就是全程使用utf-8
但今天看了朋友的一個web application案子
資料庫有設定好nvarchar
網頁部份也皆為utf-8編碼
網頁資料的存取皆可正常顯示
但使用export to excel功能時 (寫csv格式)
中文部份皆為亂碼顯示
----------------------------------
檢查後發現原因就出在網頁的utf-8編碼上
網頁輸出excel的方法之一是使用.csv的格式來輸出excel檔案
按照前述的設定進行excel產出時
該csv檔本身的utf-8編碼會造成亂碼的問題
因為excel預設是以ansi模式去開啟csv檔的
並不直接支援unicode格式
此處可利用筆記本進行檔案開啟並另存新檔,發現格式是utf-8
利用notepad可發現文字可正常顯示
用記事本另存新檔時改為ansi模式
再使用excel即可正常開啟
-----------------------------------
針對線上直接開啟csv亂碼目前的解決方案是
(1)方法一
利用指定codepage的方式,設定為950(繁體中文)
所存下來的csv檔即為ansi模式
就可以正常開啟,中文部份不會有亂碼
但只這能解決單一編碼的問題
如果在頁面上有中、日、英的文字
在產出excel時的日文部份就被犧牲掉了

(2)方法二
... 先另存csv檔後再用excel開啟
此時excel會提示編碼的選擇
此時選定utf-8即可正常顯示
(3)方法三:於IE中直接開啟csv即可顯示多國語言
....(還在想)....
--------
補充說明:有關檔名的部份,非英文字透過encode方式即可解決不正常的問題
ex: Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8))
----------------------------------------------------------

第三種:
PC平臺:英文版windows xp sp3, 英文版office 2007
我們的網站經常需要導出一些csv檔,其中包含有中文。過去用Excel 2003處理,沒有任何問題。但是當升級到Excel 2007之後,打開這些csv檔,裏面的中文就會顯示為亂碼。
百思不得其解。後來終於發現,跟語言編碼有關。據說csv不支持Unicode,或者是不支持UTF-8,所以導出的csv檔往往都是默認ANSI編碼的。但是這種ANSI編碼含中文的檔,notepad記事本可以正常打開,Excel 2007打開就是亂碼。
最後發現,問題的關鍵是“編輯語言”,Start - All Programs - Microsoft Office - Microsoft Office Tools - Microsoft Office 2007 Language Settings ,在其中的 Editing Language標籤,選擇Primary Editing Language 為 Chinese(PRC).
然後打開這些含有中文的csv檔就不會有亂碼了。不要問我為什麼,這是實踐的結果。不過我猜,也許微軟認為經常編輯英文的人不需要面對中文問題?
留作紀念吧,免得未來忘掉了。

* 如果CSV檔中夾雜繁體與簡體中文,那麼編碼強制從UTF-8改為ANSI時,會導致簡體中文的文字變成問號,而造成資訊遺失。
---------------------------------------------------------------------------
第四種
以前爬文~記得如果是xls 像是 Response.ContentEncoding = Encoding.UTF7;可以搞定。

TOP

發新話題

本站所有圖文均屬網友發表,僅代表作者的觀點與本站無關,如有侵權請通知版主會盡快刪除。