CSV 用 Excel 開啟中文變亂碼?原因與三種解法
從網購後台、表單系統或資料庫匯出一份 CSV,雙擊用 Excel 打開,結果中文全部變成「銝剜?」這類看不懂的符號。用記事本打開卻又是正常的。這個問題幾乎每個處理過資料的人都遇過,原因其實只有一個:文字編碼不一致。
為什麼會有「編碼」這件事?
電腦只認得數字。要儲存文字,就必須約定「哪個數字代表哪個字」,這套約定就叫做文字編碼。英文字母只有幾十個,各種編碼的規定大多相同;但中文字有數萬個,不同年代、不同地區就發展出不同的編碼:
| 編碼 | 使用地區與年代 | 特性 |
|---|---|---|
| Big5 | 台灣、香港,1980 年代起 | 只收錄約一萬三千個繁體中文字,每字 2 位元組 |
| GB2312/GBK | 中國大陸 | 以簡體中文為主 |
| UTF-8 | 全世界,現今網路標準 | 可以表示所有語言的文字,中文每字 3 位元組 |
同一個「中」字,在 Big5 裡是 A4 A4,在 UTF-8 裡是 E4 B8 AD。如果用錯誤的編碼去解讀,就會把這些數字對應到完全不同的字——這就是亂碼。
Excel 為什麼會讀錯?
CSV 是純文字檔,檔案本身並沒有欄位記錄「我是用什麼編碼存的」。Excel 雙擊開啟 CSV 時,在沒有其他線索的情況下,會使用作業系統的預設編碼。繁體中文版 Windows 的預設是 Big5(Windows 稱為「950 繁體中文」)。
然而現在幾乎所有網站與雲端系統匯出的 CSV 都是 UTF-8。於是 Excel 用 Big5 去讀 UTF-8 的檔案,中文就全亂了。記事本之所以正常,是因為它會主動分析內容判斷編碼。
關鍵角色:BOM
BOM(Byte Order Mark,位元組順序標記)是放在檔案最開頭的三個位元組 EF BB BF,用來宣告「這個檔案是 UTF-8」。Excel 只要看到 BOM,就會改用 UTF-8 解讀,中文就能正確顯示。
問題是很多系統匯出 CSV 時不會加 BOM——因為對程式來說 BOM 是多餘的,有些程式甚至會因為 BOM 而讀錯第一個欄位名稱。這就造成了「程式讀得懂、Excel 讀不懂」的狀況。
解法一:幫 CSV 加上 BOM(最快)
使用本站的試算表轉換,把 CSV 放進去,目標格式選 CSV,保持「加上 BOM」勾選,轉換後的檔案雙擊就能用 Excel 正常開啟。工具會自動判斷原檔是 UTF-8 還是 Big5,兩種都能處理。
解法二:使用 Excel 的匯入功能
- 開啟空白的 Excel 活頁簿,點選「資料」索引標籤。
- 選擇「從文字/CSV」,選取你的檔案。
- 在預覽視窗的「檔案原點」選擇「65001: Unicode (UTF-8)」,確認中文正常後按「載入」。
這個方法的好處是可以同時把電話號碼、身分證字號等欄位設成「文字」型態,避免開頭的 0 被吃掉,或長數字變成科學記號。
解法三:直接轉成 XLSX
如果這份資料主要是給人用 Excel 看的,最一勞永逸的做法是轉成 XLSX。XLSX 內部固定使用 Unicode,不會有編碼問題,還能保留多個工作表。本站的試算表工具可以直接把 CSV 轉成 XLSX。
反方向:Excel 存的 CSV 給系統用變亂碼
反過來的情況也很常見:在 Excel 選「另存為 CSV(逗號分隔)」,上傳到網站後中文變成問號或亂碼。這是因為舊版 Excel 存出的 CSV 是 Big5 編碼,而網站預期 UTF-8。解決方式是另存時選擇「CSV UTF-8(逗號分隔)」,或把 Big5 的 CSV 用本站工具轉成 UTF-8(不加 BOM 也可以)。
重點整理
- 亂碼的原因是存檔與讀檔用了不同的文字編碼。
- Excel 雙擊開啟 CSV 時預設用 Big5,現代系統輸出的多半是 UTF-8。
- 在檔案開頭加上 BOM,Excel 就會改用 UTF-8 解讀。
- 長期保存或交給他人時,XLSX 比 CSV 更不容易出問題。