」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 使用「encoding/csv」將引號的字串寫入 CSV 檔案時,為什麼我的 Go 程式碼會產生額外的引號?

使用「encoding/csv」將引號的字串寫入 CSV 檔案時,為什麼我的 Go 程式碼會產生額外的引號?

發佈於2024-11-12
瀏覽:999

Why does my Go code produce extra quotes when writing quoted strings to a CSV file using `encoding/csv`?

使用Go 編碼/CSV 引用字串的奇怪CSV 結果

在此程式碼片段中,目標是將資料寫入CSV 文件,確保引用的字串在數據已正確轉義。但是,產生的 CSV 包含額外的引號,導致不一致。

package main

import (
    "encoding/csv"
    "fmt"
    "log"
    "os"
)

func main() {
    f, err := os.Create("test.csv")
    if err != nil {
        log.Fatal(err)
    }
    defer f.Close()

    w := csv.NewWriter(f)
    record := []string{"Unquoted string", "Cr@zy text with , and \\ and \" etc"}
    w.Write(record)

    record = []string{"Quoted string", fmt.Sprintf("%q", "Cr@zy text with , and \\ and \" etc")}
    w.Write(record)

    w.Flush()
}

帶引號的字串的預期輸出為:

[Unquoted string Cr@zy text with , and \ and " etc]
[Quoted string "Cr@zy text with , and \\ and \" etc"]

但是,實際輸出包含額外的引號:

Unquoted string,"Cr@zy text with , and \ and "" etc"
Quoted string,"""Cr@zy text with , and \\ and \"" etc"""

理解額外引號

帶引號的字串是遵循CSV 標準的結果,該標準要求將雙引號轉義為兩個雙引號。這是區分資料中實際雙引號和用於記錄分隔的雙引號所必需的。

解決方案

代碼不需要擔心轉義雙引號,因為CSV 閱讀器會自動對它們進行轉義。因此解決辦法就是在寫帶引號的字串時去掉多餘的雙引號。

修改代號

for _, record := range [][]string{
    {"Unquoted string", "Cr@zy text with , and \\ and \" etc"},
    {"Quoted string", "Cr@zy text with , and \\ and \" etc"},
} {
    record[1] = fmt.Sprintf("%q", record[1][1:len(record[1])-1])
    w.Write(record)
}

更新輸出

Unquoted string,Cr@zy text with , and \ and " etc
Quoted string,"Cr@zy text with , and \\ and \" etc"

透過此更改,帶引號的字串現在已正確轉義,並且刪除了多餘的引號。

最新教學 更多>
  • 為什麼 C 中基於指標和基於陣列的字串的「strlen」和「sizeof」產生不同的結果?
    為什麼 C 中基於指標和基於陣列的字串的「strlen」和「sizeof」產生不同的結果?
    基於指標和基於數組的字串初始化的字串長度和大小計算的不同輸出了解結果當建立具有相同值的基於指標的字串str1 和基於陣列的字串str2 時,函數strlen 和sizeof會產生不同的結果。具體來說,對於聲明:char *str1 = "Sanjeev"; char str2[]...
    程式設計 發佈於2024-11-16
  • C++ 中的強型別枚舉可以自動轉換為整數嗎?
    C++ 中的強型別枚舉可以自動轉換為整數嗎?
    自動將強型別列舉轉換為整數在C 中,列舉有兩種:強型別枚舉與常規枚舉。常規枚舉可以隱式轉換為整數,而強型別枚舉需要明確轉換。這就提出了一個問題:是否有一種自動方法可以將強型別枚舉轉換為整數,而無需使用明確強制轉換? 答案是否定的,而且這是有意為之。強型別枚舉旨在防止隱式轉換為整數。本質上,編譯器確保...
    程式設計 發佈於2024-11-16
  • 如何使用 CSS 響應式地建立具有兩個不同邊框的圓?
    如何使用 CSS 響應式地建立具有兩個不同邊框的圓?
    響應式設計具有雙邊框的圓圈創建 CSS 圓圈非常簡單,如提供的工作 CSS 所示。然而,要實現具有兩個不同邊框的圓,我們需要採用額外的 CSS 技術。 使用提供的HTML 結構,其中單一 元素代表圓:<div></div>我們可以如下修改CSS來創建一個有兩個邊框的圓:div...
    程式設計 發佈於2024-11-16
  • 如何在單一 MySQL 操作中聲明任務的所有權並檢索其資料?
    如何在單一 MySQL 操作中聲明任務的所有權並檢索其資料?
    透過單一操作在MySQL 中實現行所有權和資料擷取:當使用多個工作程序應用程式循環執行任務時,它確保每個應用程式有效地聲明對唯一任務的所有權可能具有挑戰性。 MySQL 提供了 UPDATE 和 SELECT 命令來完成此操作,但單獨執行它們可能會引入延遲和潛在的競爭條件。 要簡化流程,請考慮以下方...
    程式設計 發佈於2024-11-16
  • 如何處理 ReactJS 中的 GET 請求重新導向和 CORS 錯誤?
    如何處理 ReactJS 中的 GET 請求重新導向和 CORS 錯誤?
    在ReactJS 中處理GET 請求重定向和CORS 錯誤當ReactJS 應用程式向伺服器發送GET 請求並接收時遇到CORS錯誤302 重定向可能是一個令人沮喪的問題。以下提供了此問題的解決方案:要解決您的場景中的 CORS 錯誤,其中 ReactJS 前端 (f.com) 請求路徑“/user...
    程式設計 發佈於2024-11-16
  • 如何在 React Router v4/v5 中建立嵌套路由?
    如何在 React Router v4/v5 中建立嵌套路由?
    React Router v4/v5 的嵌套路由嵌套路由可讓您在 React 應用程式中建立用於導航的分層結構。在 React Router v4 和 v5 中,您可以透過使用 和 元件來實現這一點。 範例考慮以下範例,我們希望將應用程式劃分為前端和管理區域。 <Match pattern...
    程式設計 發佈於2024-11-16
  • Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta:列偏移的刪除和恢復Bootstrap 4 在其Beta 1 版本中引入了重大更改柱子偏移了。然而,隨著 Beta 2 的後續發布,這些變化已經逆轉。 從 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    程式設計 發佈於2024-11-16
  • 如何在 PHP 迴圈中建立動態變​​數?
    如何在 PHP 迴圈中建立動態變​​數?
    循環中的動態變數建立:綜合答案要在循環中建立變數,您可以採用以下技術:1。基於循環計數器的變數:如您所提到的,您希望變數隨著每次循環迭代而遞增。為此,您可以使用以下語法:for ( $counter = 1; $counter <= $aantalZitjesBestellen; $count...
    程式設計 發佈於2024-11-16
  • 如何衡量 Go 整合測試的測試覆蓋率?
    如何衡量 Go 整合測試的測試覆蓋率?
    確定Go 整合測試中的測試覆蓋率整合測試旨在評估整個系統的功能,通常透過模擬或控制外部依賴。然而,確定整合測試的測試覆蓋率提出了獨特的挑戰。 測量非包測試中的覆蓋率在所描述的場景中,測試與包是分開的他們測試。因此, go test -cover 指令報告覆蓋率為 0%。為了解決這個問題,可以使用 -...
    程式設計 發佈於2024-11-16
  • 如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    在 PHP 中組合關聯數組在 PHP 中,將兩個關聯數組組合成一個數組是常見任務。考慮以下請求:問題描述:提供的代碼定義了兩個關聯數組,$array1和$array2。目標是建立一個新陣列 $array3,它合併兩個陣列中的所有鍵值對。 此外,提供的陣列具有唯一的 ID,而名稱可能重疊。要求是建構一...
    程式設計 發佈於2024-11-16
  • C++ 程式設計師如何使用 NPAPI 開發強大的瀏覽器外掛程式?
    C++ 程式設計師如何使用 NPAPI 開發強大的瀏覽器外掛程式?
    製作瀏覽器外掛:C 程式設計師指南增強網頁瀏覽器的專業功能需要開發瀏覽器外掛程式。然而,編寫這些插件的過程提出了問題,特別是對於打算使用 C 為 Windows 編寫插件的人。 開發瀏覽器外掛程式的關鍵在於利用 Netscape 外掛程式介面 (NPAPI)。 NPAPI 使開發人員能夠建立處理特定...
    程式設計 發佈於2024-11-16
  • 如果 `std::move` 實際上沒有移動任何東西,為什麼它被稱為 `std::move`?
    如果 `std::move` 實際上沒有移動任何東西,為什麼它被稱為 `std::move`?
    為什麼 std::move 命名為 std::move? std::move 函數儘管有它的名字,但它實際上並沒有移動任何東西。它只是將左值(引用物件的表達式)轉換為右值(表示臨時物件的表達式)。此轉換是透過轉換為 xvalue 類別來執行的,這與左值和純右值不同。 這種命名選擇的原因可以追溯到該概...
    程式設計 發佈於2024-11-16
  • 如何在懸停時使元素背景顏色變暗而不影響透明度?
    如何在懸停時使元素背景顏色變暗而不影響透明度?
    使用CSS 使元素背景顏色變暗增強用戶界面涉及透過改變交互元素(例如按鈕)的外觀來突出顯示它們。一種常見的方法是在懸停時使背景顏色變暗。 最初,人們可能會嘗試調整不透明度,但這會影響顏色和透明度。存在更有針對性的解決方案。 方法:疊加深色圖層使用背景影像建立深色疊加層。此方法保留了原始文字顏色,同時...
    程式設計 發佈於2024-11-16
  • CSS3 轉換與 jQuery 動畫:iPad HTML5 應用程式哪個更快?
    CSS3 轉換與 jQuery 動畫:iPad HTML5 應用程式哪個更快?
    效能比較:CSS3 轉換與jQuery 動畫在iPad HTML5 應用程式中,您實現了觸控事件以提高回應速度並利用用於元素操作的jQuery。然而,您正在爭論是使用 jQuery 動畫還是 CSS3 動畫轉換。讓我們深入研究一下它們的性能比較。 根據基準研究,jQuery 動畫的執行速度明顯慢於 ...
    程式設計 發佈於2024-11-16
  • 三元條件運算子在程式設計中如何運作?
    三元條件運算子在程式設計中如何運作?
    理解三元條件運算子程式設計中,使用問號(「?」)和冒號(「:」)運算子括號內形成三元條件運算子。它提供了傳統 if-else 語句的簡潔替代方案,可讓您評估條件並根據其真實性分配值。 語法和用法The三元運算子遵循語法:boolean_expression ? true_value : false_...
    程式設計 發佈於2024-11-16

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

Copyright© 2022 湘ICP备2022001581号-3