将一个编码的字符串添加到http谐振似乎用!F(MISSING)替换了一些字符。如何预防?
输出:
{" encodedText":" M6c8RqL61nMFy%F(缺失)hQmciSYrh9ZXgVFVjO"}
代码:
package main
import (
"encoding/json"
"fmt"
"net/http"
"net/url"
)
type EncodeResult struct {
EncodedText string `json:"encodedText"`
}
func main() {
http.HandleFunc("/encodedString", encodedString)
_ = http.ListenAndServe(":8080", nil)
}
func encodedString(w http.ResponseWriter, r *http.Request) {
inputString := "M6c8RqL61nMFy/hQmciSYrh9ZXgVFVjO"
er := EncodeResult{url.QueryEscape(inputString)}
response, _ := json.Marshal(er)
w.Header().Set("Content-Type", "application/json")
fmt.Fprintf(w, string(response))
}
答案 0 :(得分:1)
它似乎正在逃避它,你能粘贴一些代码吗?
http://play.golang.org/p/rUEGn-KlTX
package main
import (
"fmt"
"net/url"
)
func main() {
escape := url.QueryEscape("M6c8RqL61nMFy/hQmciSYrh9ZXgVFVjO")
fmt.Println(escape)
}
答案 1 :(得分:0)
您使用转义值“M6c8RqL61nMFy%2FhQmciSYrh9ZXgVFVjO”作为此行的格式字符串:
fmt.Fprintf(w, string(response))
Fprintf尝试格式化动词“%2F”的参数。没有争论,所以Fprintf为动词打印“%!F(MISSING)”。
修复方法是不将输出用作格式字符串。因为在写入响应时不需要任何格式化,所以将最后一行更改为:
w.Write(response)