Excel 轉 CSV 不亂碼:UTF-8、BOM 與分隔符號
CSV 裡的亂碼重音字,多半是編碼不一致造成的:檔案存成 UTF-8,卻被當成 Windows 編碼開啟。匯出工作表時,請選擇 CSV UTF-8;如果要用 Excel 開啟,就加上位元組順序標記(BOM)。分隔符號則選擇符合你所在地區設定的格式。匯出前,請把郵遞區號、電話號碼等欄位設為文字格式,開頭的零才會保留。
Excel 轉 CSV需要 CSV,但手上是 Excel 檔案免費使用為什麼「é」會變成「é」
檔案中的字元是以位元組儲存的。在 UTF-8 中,字母 é 由兩個位元組 C3 與 A9 組成。如果程式把這些位元組當成常見的 Windows 編碼 Windows-1252 來讀取,就會把 C3 看成 Ã,把 A9 看成 ©。於是「café」就顯示成「café」。你可以自己試一下:把 é 以 UTF-8 編碼,再用 Windows-1252 解碼,結果就是 é。ü、ñ、ö 也會以同樣方式出錯。
解法不是去修改字元,而是告訴程式這個檔案使用哪種編碼。
UTF-8 與 BOM
UTF-8 是網路與多數現代軟體中文字的標準編碼。純文字的 CSV 檔案沒有欄位能標示自己用的是哪種編碼,所以程式只能猜。BOM 是檔案開頭的三個位元組 EF BB BF,能讓會檢查它的程式知道這是 UTF-8。Windows 上的 Excel 常會用系統預設的編碼來開啟沒有 BOM 的 UTF-8 檔案,因此加上 BOM 是常見的解法。
新版 Excel 的「另存新檔」選單中有「CSV UTF-8」選項,會自動加上 BOM。你也可以透過「資料」、「從文字/CSV」匯入檔案,並將檔案原始格式設為 65001(UTF-8)。BOM 有一個缺點:不認得它的程式可能會把它當成第一個欄位名稱的一部分。多數解析器與試算表程式都能正確處理,但如果資料匯入工具回報標題怪怪的,就把 BOM 移除。
逗號還是分號
CSV 的全名是 comma-separated values(逗號分隔值),RFC 4180 規格也規定欄位以逗號分隔。但在許多國家,例如使用小數點逗號、以 1,5 表示一點五的地區,Excel 的列表分隔符號其實是分號。遇到這種情況,用逗號分隔的檔案在 Excel 中可能會錯誤拆分,而 1,5 這樣的數字會被拆成兩個欄位。
請選擇目標程式預期的分隔符號。Excel 轉 CSV 工具提供逗號、分號與定位字元(Tab)三種選項。如果檔案要給使用小數點逗號的地區程式使用,通常分號是比較安全的選擇。
日期變成序列號
Excel 以序列號儲存日期,也就是從某個起點開始計算天數。在 1900 日期系統中,1900 年 1 月 1 日是序列號 1。Excel 還把 1900 年當成閏年,因此會把一個實際上不存在的 1900 年 2 月 29 日計為序列號 60。這讓 1900 年 3 月 1 日成為序列號 61,之後的每個日期都會多出一天。這個錯誤源自 Lotus 1-2-3,微軟為了相容性而保留了這套系統。其他軟體讀取 1900 年 3 月 1 日之前的日期時,可能會差一天。
匯出日期時,你可能會看到 44927 而不是 2023-01-01,或是較舊的日期差了一天。工具會把日期轉成易讀的文字。如果你是手動匯出,請把日期欄設為文字,並使用 yyyy-mm-dd 的 ISO 格式,這樣每個程式讀取的結果都一致。
開頭的零消失了
郵遞區號 02134 是文字,但 Excel 會把輸入的數字當成數值,於是顯示成 2134。工作表中的零已經不見了,根據它寫出的 CSV 也不會有這個零。以 0 開頭的電話號碼和很長的證號也會發生同樣的問題。非常長的數字還可能遺失位數,因為 Excel 只保留約 15 位有效數字。
解法是在輸入或匯入資料前,先把這些欄位儲存為文字。如果你開啟的 CSV 已經有開頭的零,請使用「資料」、「從文字/CSV」,並將該欄設為文字,不要直接雙擊檔案開啟。
引號規則
RFC 4180 定義了常見的 CSV 格式。其主要的引號規則如下:
- 包含逗號、雙引號或換行的欄位,必須用雙引號括起來。
- 在有引號的欄位中,雙引號要寫成兩個雙引號。
- 規格中的行尾為 CRLF,但多數工具也接受 LF。
例如,列 "Müller, Anna","She said ""ok""" 有兩個欄位:Müller, Anna 與 She said "ok"。IANA 註冊的 CSV MIME 類型是 text/csv。
RFC 4180 不允許未加引號的欄位中出現雙引號,許多解析器會拒絕這種列,或是拆分錯誤。請正確為欄位加上引號,或移除多餘的字元。
匯出前的檢查清單
- 匯出為 CSV UTF-8;如果要用 Excel 開啟,就加上 BOM。
- 選擇目標程式預期的分隔符號。
- 將郵遞區號、電話號碼等類似編號的欄位設為文字格式。
- 日期寫成 yyyy-mm-dd。
- 用純文字編輯器開啟檔案,檢查第一行與幾筆含重音字的姓名。
不可見字元(例如不換行空格)也可能造成匯入錯誤。移除隱藏字元工具可以找出並移除這些字元,而文字中的隱藏字元則說明它們的來源。檔案清理乾淨後,CSV 轉 JSON可以為開發者進行轉換,做法見CSV 轉 JSON 再轉回來。
匯出前,也值得檢查儲存格本身:Excel 公式檢查工具會列出顯示錯誤或指向其他檔案的公式,而這些儲存格正是匯入 CSV 後會變成空白的地方。匯出後,可以比較試算表,看看兩個版本之間有哪些變化。
快速解答
為什麼我的檔案在某個程式裡正常,在 Excel 裡卻亂碼? UTF-8 檔案若沒有 BOM,Windows 上的 Excel 可能會用系統預設編碼來讀取。加上 BOM,或在匯入時選擇 UTF-8,就能解決。
Mac 版的 Excel 需要 BOM 嗎? 有些資料來源說需要,所以在寄送前,請先用含重音姓名的檔案測試。
匯出後還能修正日期嗎? 可以,只要日期仍是序列號。不過最好一開始就以 yyyy-mm-dd 格式匯出。
轉換檔案時,我的試算表會被上傳嗎? 這個工具在你的瀏覽器中執行,因此檔案是在你自己的裝置上處理。你可以參考上傳檢查指南來確認。
借助 AI 協助,由英文原文翻譯而成。
留言
還沒有留言,搶先留言吧。


