将编码的字符串添加到http共振似乎将某些字符替换为!F(MISSING)。如何预防?
输出:
{“ encodedText”:“ M6c8RqL61nMFy%!F(MISSING)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)) }
您正在使用转义值“ M6c8RqL61nMFy%2FhQmciSYrh9ZXgVFVjO”作为以下行上的格式字符串:
fmt.Fprintf(w, string(response))
Fprintf尝试格式化动词“%2F”的自变量。没有参数,因此Fprintf为动词打印“%!F(MISSING)”。
解决方法是不要将输出用作格式字符串。由于写入响应时不需要任何格式,因此将最后一行更改为:
w.Write(response)