在Go中写入文件时\ n转义

时间:2018-11-20 13:11:32

标签: bash go curl line-breaks

我已经创建了一个Web服务器,该服务器接收POST请求,创建一个txt文件,并使用lp命令将其打印。

但是,那些来自包含“ \ n”的请求的字符串将以\ n作为文本保存到文件中,而不是创建换行符。

如果我声明一个硬编码字符串,则会创建换行符。

这是相关代码:

func handler(w http.ResponseWriter, r *http.Request) {
    bodyBuffer, _ := ioutil.ReadAll(r.Body)
    err := ioutil.WriteFile("/tmp/print.txt", bodyBuffer, 0644)
    //... More code
}

如果我运行此命令:

curl -X POST --data "My\nName" http://127.0.0.1:8080/

生成的文本文件包含:My \ nName而不是两行。

2 个答案:

答案 0 :(得分:4)

“我的\ n名称”没有将\n插值到换行符

echo "My\nName"
My\nName

但是,在外壳中有多种方法可以实现

echo "$(printf 'My\nName')"
My
Name

您的Go很好,bash弯边的表现不如预期

答案 1 :(得分:0)

改为使用curl -X POST --data $'My\nName' http://127.0.0.1:8080/。 $ -strings(在Bash中)是ANSI-C引号,它支持所有类似于C的转义序列,包括“ \ n”。