我有一個字串"\"{1,2}\"\n",其中包含轉義字符\"和\n.
我嘗試轉換為位元組陣列,并使用 csv 讀取器將此陣列讀回字串。但是,我注意到這些轉義字符已從回讀字串中洗掉。代碼在這里。
package main
import (
"fmt"
"bytes"
"encoding/csv"
)
func main() {
var buf bytes.Buffer
data := "\"{1,2}\"\n"
buf.WriteString(data)
fmt.Println(buf) //{[34 123 49 44 50 125 34 10] 0 0}
input_arr := []byte{34,123,49,44,50,125,34,10}
var newbuf bytes.Buffer
newbuf.Write(input_arr)
csvReader := csv.NewReader(&newbuf)
news, err := csvReader.Read()
if err != nil {
fmt.Println(err)
}
fmt.Println(news[0]) // [{1,2}]
}
我想知道如何將這些轉義字符保留在我的回讀字串中。IEnews=="\"{1,2}\"\n"
uj5u.com熱心網友回復:
data用解釋的字串文字初始化。序列\"表示單雙引號字符",反斜杠只出現在源代碼中,而不出現在字串值中。編譯器在解釋字串文字時“消除”它。
如果您希望反斜杠字符成為字串值的一部分,請使用原始字串文字:
data := `\"{1,2}\"\n`
fmt.Println(data)
這將輸出:
\"{1,2}\"\n
或者繼續使用解釋的字串文字并\\為字串值中的單個反斜杠添加一個序列:
data := "\\\"{1,2}\\\"\\n"
fmt.Println(data)
這輸出相同。
如果您的目標是為 CSV 列值添加雙引號,則必須使用 CSV 轉義(帶引號的欄位):也就是說,您必須將單元格放入雙引號中,并使用 2 個雙引號表示單個雙引號:
data := `"""{1,2}"""
`
csvReader := csv.NewReader(strings.NewReader(data))
news, err := csvReader.Read()
if err != nil {
fmt.Println(err)
}
fmt.Println(news[0])
這將輸出(在Go Playground上嘗試):
"{1,2}"
這在以下軟體包檔案中有所記錄encoding/csv:
以引號字符 " 開頭和結尾的欄位稱為參考欄位。開頭和結尾的引號不是欄位的一部分。
來源:
normal string,"quoted-field"結果在領域
{`normal string`, `quoted-field`}在帶引號的欄位中,引號字符后跟第二個引號字符被視為單引號。
"the ""word"" is true","a ""quoted-field"""結果是
{`the "word" is true`, `a "quoted-field"`}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/323630.html
上一篇:如何在C 中限制字串具有特定字母
