有多個 JS 函式庫允許匯出到 Excel。但是,如果我們想遵循極簡主義方法來避免額外的依賴,該怎麼辦?
最簡單的方法是從 JSON 產生 CSV,可以輕鬆地在 Excel 中開啟。
但是在展示轉換邏輯之前,讓我們先了解一下 CSV 是什麼以及在建立 CSV 檔案時我們將使用哪種編碼。
CSV 格式
此 RFC 4180 逗號分隔值 (CSV) 檔案的通用格式和 MIME 類型指定了 CSV 格式的定義。請注意,這只是一個備忘錄,因為 CSV 格式尚未正式標準化。
主要定義
- 每筆記錄位於單獨的行上,由換行符 (CRLF) 分隔。
- 檔案中的最後一筆記錄可能有也可能沒有結束換行符。
- 標頭應在整個文件中包含相同數量的欄位。
- 每個欄位可以用雙引號括起來,也可以不用雙引號括起來。
- 包含換行符 (CRLF)、雙引號和逗號的欄位應用雙引號引起來。
- 如果使用雙引號括住字段,則字段內出現的雙引號必須透過在其前面加上另一個雙引號來轉義。
編碼
在我的 JSON 資料中,我有來自 ISO Latin-1 (ISO/IEC 8859-1) 字元集的字元 æ å ø,在建立 csv 檔案時必須考慮這些字元。
需要考慮的 Unicode® 標準版本 15.0 的一些摘錄。
Unicode 與 UTF-8/16/32
來自 Unicode® 標準版本 15.0:
- Unicode 是書寫字元和文字的通用字元編碼標準,包含來自世界各地文字的 149,186 個字元。
- Unicode 字元以三種編碼形式之一表示:32 位元形式 (UTF-32)、16 位元形式 (UTF-16) 和 8 位元形式 (UTF-8)。
- Unicode 聯盟完全認可使用三種 Unicode 編碼形式中的任何一種作為實現 Unicode 標準的一致方式。例如,重要的是不要陷入試圖區分「UTF-8 與 Unicode」的陷阱。 UTF-8、UTF-16 和 UTF-32 都是實現 Unicode 標準編碼字元的同等有效且一致的方式。
位元組順序標記 (BOM)
- 用於位元組順序標記的字元 U+FEFF (UTF-8 EF BB BF) 被命名為零寬度無中斷空格。
- Unicode 純文字的 UTF-16 和 UTF-32 編碼形式對將資料寫入檔案時所使用的位元組順序敏感。
- 辨識a開頭的位元組序列
資料流可以視為資料流正在使用 UTF-8 編碼方案的近乎確定的指示。
簡而言之,在CSV 字串之前添加零寬度不間斷空格將強制Excel 應用UTF-8 編碼而不是1252:西歐(Windows) 或Excel 在出現U+FEFF 字元時選擇的其他編碼未提供。
我將在本系列的下一篇文章中展示使用零寬度不間斷空格來產生 CSV 檔案和不使用零寬度不間斷空格的 CSV 檔案之間的差異...
以上是將 JSON 匯出為 CSV:關於 CSV 和 Unicode 的說明的詳細內容。更多資訊請關注PHP中文網其他相關文章!