亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么 golang bytes.Buffer 會有這樣的行為?

為什么 golang bytes.Buffer 會有這樣的行為?

Go
慕無忌1623718 2023-07-31 16:28:40
我最近遇到一個問題,我正在byte.Buffer使用writer. 但是當我String()這樣做時byte.Buffer,我得到了意外的輸出(添加了額外的雙引號對)。你能幫我理解一下嗎?這是我的問題的代碼片段!我只需要幫助理解為什么每個單詞都用雙引號引起來。func main() {    var csvBuffer bytes.Buffer    wr := csv.NewWriter(&csvBuffer)    data := []string{`{"agent":"python-requests/2.19.1","api":"/packing-slip/7123"}`}    err := wr.Write(data)    if err != nil {        fmt.Println("WARNING: unable to write ", err)    }    wr.Flush()    fmt.Println(csvBuffer.String())}輸出:{""agent"":""python-requests/2.19.1"",""api"":""/packing-slip/7123""}
查看完整描述

1 回答

?
繁星點點滴滴

TA貢獻1803條經驗 獲得超3個贊

在 CSV 中,雙引號 ( ") 轉義為 2 個雙引號。這就是你所看到的。


string您對包含雙引號的單個值進行編碼,因此所有這些都將替換為 2 個雙引號。


解碼時,結果當然會包含 1 個雙引號:


r := csv.NewReader(&csvBuffer)

rec, err := r.Read()

fmt.Println(rec, err)

輸出(在Go Playground上嘗試):

[{"agent":"python-requests/2.19.1","api":"/packing-slip/7e0a05b3"}]?<nil>

引用以下的包文檔encoding/csv

在帶引號的字段中,引號字符后跟第二個引號字符被視為單引號。

"the?""word""?is?true","a?""quoted-field"""

結果是

{`the?"word"?is?true`,?`a?"quoted-field"`}

在 CSV 中,以下內容是等效的:

one,two

"one","two"

現在,如果值包含雙引號,則表明該值結束。CSV 通過用 2 個雙引號替換雙引號來處理此問題。該值以 CSVone"1形式編碼one""1,例如:

"one""1","two""2"


查看完整回答
反對 回復 2023-07-31
  • 1 回答
  • 0 關注
  • 129 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號