CSV 表格 (.csv)
RFC 標準逗號分隔值(Comma-Separated Values, CSV)是用於表格資料的常見純文字格式,其中每一行代表一筆資料記錄,欄位則由分隔字元隔開。
將 XLSX 轉換為 CSV
免費的瀏覽器端 XLSX 轉 CSV 轉換器。在您的裝置上即時轉換檔案。
線上壓縮 CSV
具隱私保障 - 檔案絕不會離開您的裝置
檢查與中繼資料
作業系統與檔案分析工具透過檢查開頭的二進位位元組序列來識別 CSV 檔案:
位元組層級標頭簽章(檔案簽章)
作業系統與檔案分析工具透過檢查開頭的二進位位元組序列來識別 CSV 檔案:
十六進位簽章(偏移量 0):
無(CSV 沒有固定的檔案簽章)ASCII 表示法: 文字位元組;編碼不固定(通常為 UTF-8)
標準化: RFC 4180 / IETF
技術規格
| 容器架構 | 以分隔符號區隔的平面文字檔案,用於表示表格資料的列與欄 |
| 壓縮 | Gzip 與 Deflate 可以壓縮重複的文字;產生的檔案大小取決於資料與設定 |
| 位元組序 | UTF-8 文字串流(Excel 會使用選用的 UTF-8 BOM EF BB BF) |
| 色彩空間 | 不適用 |
| 色版與結構 | 以 CRLF 分隔的列記錄,欄位則以逗號分隔 |
| 最大尺寸 | 無限制;可串流處理至數 GB 大小,不需將整個檔案載入記憶體中 |
| 透明度 | 不適用 |
| 串流與漸進式 | 所有資料管線皆支援原生逐行串流處理 |
技術比較矩陣:CSV 對比競爭格式
| 技術屬性 | CSV (目前) | Excel (XLSX) | Parquet | JSON |
|---|---|---|---|---|
| 檔案類型 | 純文字平面表格 | 壓縮的 XML 試算表 | 二進位欄式儲存 | 階層式文字 |
| 多個工作表 | 無(僅限單一平面表格) | 有(多個活頁簿與工作表) | 以分割區為基礎的儲存 | 巢狀陣列與物件 |
| 資料類型 | 無型別的原始文字 | 具型別的儲存格、公式、格式設定 | 嚴格的二進位欄位類型 | 基本類型(字串、數字、布林值) |
| 大型資料分析 | 慢(需要線性讀取每一列) | 不適合大量資料 | 極快(欄位剪枝與條件下推) | 適中 |
常見損壞模式與十六進位修復指南
欄位向右偏移或列數不符。
根本原因: 文字欄位包含未跳脫的逗號且周圍沒有加上引號。
修復: RFC 4180 要求包含逗號的欄位必須用雙引號包住:"Smith, John"。
帶重音符號的字元在 Excel 中呈現奇怪的符號(例如亂碼 é,而非 é)。
根本原因: Excel 在開啟 UTF-8 CSV 時,誤以為是舊版的 Windows ANSI/CP1252 字元編碼。
修復: 在檔案開頭加上 3 位元組的 UTF-8 位元組順序記號(0xEF 0xBB 0xBF)。
安全性分析與解析器攻擊向量
CSV 檔案會直接在 Excel 和 Google 試算表等試算表軟體中開啟,使使用者暴露於公式注入(CSV Injection)攻擊的風險中。
已知攻擊向量
- 公式注入:以「=」、「+」、「-」或「@」開頭的儲存格會執行試算表巨集或 DDE 指令(例如「=cmd|' /C calc'!A0」)。
- 透過 HYPERLINK() 公式進行資料外洩,點擊時會將敏感的儲存格資料傳送至遠端攻擊者的伺服器。
防禦最佳實務: 將使用者資料匯出至 CSV 時,請在任何以「=」、「+」、「-」或「@」開頭的儲存格前面加上單引號(')或定位字元,以強制在 Excel 中以純文字呈現。
歷史起源與里程碑
主要優勢與優點
- 極致簡單:可用任何文字編輯器讀取,並可匯入每一個資料庫與試算表中。
- 極為快速的逐行串流處理,不需要建立完整的記憶體內 DOM。
- 極低的額外負擔:沒有冗長的標籤語法或綱要定義。
技術限制與缺點
- 沒有標準資料類型:數字、日期、布林值和文字全都儲存為原始字串。
- 不支援多個工作表、儲存格格式、公式或中繼資料。
- 分隔符號衝突(文字中的逗號、歐洲地區使用的逗號小數點)經常導致解析錯誤。
有趣的技術冷知識
- 在許多將逗號用作小數點的歐洲國家中,會使用分號(;)來代替逗號作為 CSV 分隔符號。
- Microsoft Excel 過去需要 UTF-8 BOM(0xEF 0xBB 0xBF)才能正確顯示非 ASCII 的帶重音符號字元。
- 英國國家醫療服務體系(NHS)在 2020 年因故遺失了近 16,000 筆嚴重特殊傳染性肺炎(COVID-19)接觸者追蹤記錄,因為資料被匯入至列數上限為 65,536 的過時 Excel 試算表格式中。
常見技術問題
什麼是 RFC 4180?
RFC 4180 是 IETF 針對 CSV 的官方標準。它規定包含逗號、換行字元或雙引號的欄位必須以雙引號包圍,且內部引號必須透過重複兩次("")來跳脫。
為什麼 CSV 檔案在 Excel 中開啟時字元會亂碼?
較舊版本的 Microsoft Excel 在直接開啟 CSV 檔案時,預設會使用本機 Windows 字碼頁(例如 Windows-1252)而非 UTF-8。在檔案開頭加入 UTF-8 BOM(位元組順序記號)可強制 Excel 正確解碼 UTF-8。
什麼是 CSV 注入(公式注入)?
當不受信任的使用者輸入包含開頭的公式觸發字元(「=」、「+」、「-」、「@」)並被匯出至試算表檔案時,就會發生 CSV 注入。使用 Excel 等軟體開啟時,試算表會自動執行公式或動態資料交換(DDE)指令,可能因此執行系統指令或外洩資料。
相關的 CSV 轉換對
將 Excel 試算表轉換為 CSV 表格,可將原始表格資料擷取為廣泛使用的文字格式,以達到廣泛的軟體相容性。
將簡單的文字型 CSV 檔案轉換為功能豐富的 XLSX 試算表,可啟用進階的資料樣式、公式與多張工作表。
將一般文字檔案轉換為結構化的關聯式資料庫,讓您可以執行快速查詢並管理複雜的資料關聯。
將關聯式資料庫備份指令碼轉換為平面的表格試算表,以便進行簡單的資料分析與報表製作。
將階層式 HDF5 資料集轉換為平面遙測 CSV 檔案,可將複雜的多維科學記錄轉化為簡單的列與欄,方便進行試算表分析。
將多維 NetCDF 科學網格轉換為平面的遙測 CSV 檔案,讓複雜的氣候與海洋資料能在基本的試算表軟體中讀取。
將 vCard 檔案轉換為 Contacts CSV 可以把階層式的聯絡人卡片轉成平坦的試算表橫列,方便進行資料庫匯入。