」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 將 JSON 匯出為 CSV:關於 CSV 和 Unicode 的說明

將 JSON 匯出為 CSV:關於 CSV 和 Unicode 的說明

發佈於2024-08-01
瀏覽:206

Export JSON to CSV: a note on CSV and Unicode

有多個JS庫允許匯出到excel。但是,如果我們想遵循極簡主義方法來避免額外的依賴,該怎麼辦?

最簡單的方法是從 JSON 產生 CSV,可以輕鬆地在 Excel 中開啟。

但在展示轉換邏輯之前,讓我們先了解一下 CSV 是什麼以及在建立 CSV 檔案時應使用哪種編碼。

CSV 格式

此 RFC 4180 逗號分隔值 (CSV) 檔案的通用格式和 MIME 類型指定 CSV 格式的定義。請注意,這只是一個備忘錄,因為 CSV 格式尚未正式標準化。

主要定義

  1. 每筆記錄位於單獨的行上,由換行符號 (CRLF) 分隔。
  2. 文件中的最後一筆記錄可能有也可能沒有結束換行符。
  3. 整個文件中標頭應包含相同數量的欄位。
  4. 每個欄位可以用雙引號括起來,也可以不用雙引號括起來。
  5. 包含換行符號 (CRLF)、雙引號和逗號的欄位應括在雙引號中。
  6. 如果使用雙引號括住字段,則字段內出現的雙引號必須透過在其前面加上另一個雙引號來轉義。

編碼

在我的 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 檔案之間的差異...

版本聲明 本文轉載於:https://dev.to/andrewelans/export-json-to-csv-what-is-csv-and-unicode-2341?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • React:了解 React 的事件系統
    React:了解 React 的事件系統
    Overview of React's Event System What is a Synthetic Event? Synthetic events are an event-handling mechanism designed by React to ach...
    程式設計 發佈於2024-11-05
  • 為什麼在使用 Multipart/Form-Data POST 請求時會收到 301 Moved Permanently 錯誤?
    為什麼在使用 Multipart/Form-Data POST 請求時會收到 301 Moved Permanently 錯誤?
    Multipart/Form-Data POSTsMultipart/Form-Data POSTs嘗試使用multipart/form-data POST 資料時,可能會出現類似所提供的錯誤訊息遭遇。理解問題需要檢視問題的構成。遇到的錯誤是 301 Moved Permanently 回應,表示資...
    程式設計 發佈於2024-11-05
  • 如何使用日期和時間物件來確定 PHP 中的時間邊界?
    如何使用日期和時間物件來確定 PHP 中的時間邊界?
    確定PHP 中的時間邊界在此編程場景中,我們的任務是確定給定時間是否在預先定義的範圍內。具體來說,我們得到三個時間字串:當前時間、日出和日落。我們的目標是確定當前時間是否位於日出和日落的邊界時間之間。 為了應對這個挑戰,我們將使用 DateTime 類別。這個類別使我們能夠表示和操作日期和時間。我們...
    程式設計 發佈於2024-11-05
  • 如何使用 CSS 變換比例修復 jQuery 拖曳/調整大小問題?
    如何使用 CSS 變換比例修復 jQuery 拖曳/調整大小問題?
    jQuery 使用CSS 轉換縮放拖曳/調整大小問題: 當應用CSS 轉換時,特別是變換:矩陣(0.5, 0, 0, 0.5, 0, 0);,對於一個div 並在子元素上使用jQuery 的draggable() 和resizing() 插件,jQuery 所做的更改變得與滑鼠位置「不同步”。 解決...
    程式設計 發佈於2024-11-05
  • 如何修復 TensorFlow 中的「ValueError:無法將 NumPy 陣列轉換為張量(不支援的物件類型浮點)」錯誤?
    如何修復 TensorFlow 中的「ValueError:無法將 NumPy 陣列轉換為張量(不支援的物件類型浮點)」錯誤?
    TensorFlow:解決「ValueError: Failed to Convert NumPy Array to Tensor (Unsupported Object Type Float)」工作時遇到的常見錯誤TensorFlow 的錯誤是「ValueError:無法將NumPy 陣列轉換為T...
    程式設計 發佈於2024-11-05
  • 如何有效率判斷本機儲存項目是否存在?
    如何有效率判斷本機儲存項目是否存在?
    確定本地儲存專案是否存在使用 Web 儲存時,在存取或修改特定專案之前驗證它們是否存在至關重要。在本例中,我們想要確定 localStorage 中是否設定了特定項目。 當前方法檢查項目是否存在的當前方法似乎是:if (!(localStorage.getItem("infiniteScr...
    程式設計 發佈於2024-11-05
  • Java 中的原子是什麼?了解 Java 中的原子性和線程安全
    Java 中的原子是什麼?了解 Java 中的原子性和線程安全
    1. Java 原子簡介 1.1 Java 中什麼是原子? 在Java中,java.util.concurrent.atomic套件提供了一組支援對單一變數進行無鎖定線程安全程式設計的類別。這些類別統稱為原子變數。最常使用的原子類別包括 AtomicInteger ...
    程式設計 發佈於2024-11-05
  • 前端/後端主要設定檔
    前端/後端主要設定檔
    從 DevOps 的角度來看,了解 Java 和 Node.js(後端和前端)程式碼庫中的設定檔對於管理建置流程、部署和環境設定至關重要。以下是在 Java 和 Node.js 應用程式中需要注意的設定檔的完整清單: Java 應用程式 後端 pom.xml (Maven): 管理依...
    程式設計 發佈於2024-11-05
  • Python 中出現「意外縮排」錯誤的原因以及如何解決?
    Python 中出現「意外縮排」錯誤的原因以及如何解決?
    Python 中意外縮排的意義是什麼? 在 Python 程式設計領域,精心製作的縮排起著至關重要的作用定義程式碼的結構和流程。當這個縮排不經意地被打亂時,就會出現「unexpected indent」錯誤,提示需要立即修正。 錯誤訊息背後:Unexpected Indent本質Python 的語法...
    程式設計 發佈於2024-11-05
  • 在 Node.js 中什麼時候應該使用 `setImmediate` 和 `process.nextTick`?
    在 Node.js 中什麼時候應該使用 `setImmediate` 和 `process.nextTick`?
    了解setImmediate 和nextTick 之間的差異了解setImmediate 和nextTick 之間的差異Node.js 版本0.10 引入了setImmediate,這是一個旨在補充process.nextjs 版本的新API。這兩個函數都提供了非同步執行回呼的方法,但它們具有控制其...
    程式設計 發佈於2024-11-05
  • jQuery中如何有效率地取得隱藏元素的高度?
    jQuery中如何有效率地取得隱藏元素的高度?
    在 jQuery 中獲取隱藏元素的高度處理隱藏元素時,檢索其高度可能具有挑戰性。暫時顯示元素以測量其高度然後再次隱藏它的傳統方法似乎效率低下。有沒有更優化的解決方案? jQuery 1.4.2 方法這是一個使用 jQuery 1.4.2 的範例:$select.show(); optionHeigh...
    程式設計 發佈於2024-11-05
  • 為什麼我不能在 Go Struct 標籤中使用變數?
    為什麼我不能在 Go Struct 標籤中使用變數?
    在Go 結構體標籤中使用變數在Go 中,結構體標籤用於指定有關結構體中字段的元數據。雖然可以使用字串文字定義標籤,但嘗試在其位置使用變數會導致錯誤。 無效用法:const ( TYPE = "type" ) type Shape struct { Type str...
    程式設計 發佈於2024-11-05
  • Qopy:身為開發人員我最喜歡的剪貼簿管理器
    Qopy:身為開發人員我最喜歡的剪貼簿管理器
    身為開發人員,我一直在尋找可以讓我的工作流程更順暢、更有效率的工具。最近,我偶然發現了 Qopy,一個可以在 Linux 和 Windows 上運行的開源剪貼簿管理器。 什麼是Qopy? Qopy 是一個簡單的剪貼簿管理器,旨在改善標準剪貼簿體驗。它的設計宗旨是用戶友好、可靠且快速...
    程式設計 發佈於2024-11-05
  • 為什麼我的按鈕上的懸停效果不起作用?
    為什麼我的按鈕上的懸停效果不起作用?
    更改懸停時的按鈕顏色:替代解決方案嘗試更改懸停時按鈕的顏色時,如果出現以下情況,可能會令人沮喪該解決方案未能產生預期的效果。考慮提供的範例程式碼:a.button { ... } a.button a:hover{ background: #383; }此解決方案嘗試在連結懸停在「按...
    程式設計 發佈於2024-11-05
  • 僅使用 Python 建構前端
    僅使用 Python 建構前端
    對於專注於後端的開發人員來說,前端開發可能是一項艱鉅的、甚至是噩夢般的任務。在我職業生涯的早期,前端和後端之間的界線是模糊的,每個人都被期望能夠處理這兩者。 CSS,尤其是,是一場持續不斷的鬥爭;這感覺像是一個不可能的任務。 雖然我喜歡前端工作,但 CSS 對我來說仍然是一個複雜的挑戰,特別是因為...
    程式設計 發佈於2024-11-05

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3