这是我的测试代码。只需制作一个简单的 HTTP 服务器。然后生成一个 JSON 数据,它的值是“&”。但结果是我不想要的。结果在代码块下方。
package main
import (
"encoding/json"
"fmt"
"log"
"net/http"
)
func testFunc(w http.ResponseWriter, r *http.Request) {
data := make(map[string]string)
data["key"] = "&"
bytes, err := json.Marshal(data)
if err != nil {
fmt.Fprintln(w, "generator json error")
} else {
//print console
fmt.Println(string(bytes))
fmt.Println("&")
//print broswer
fmt.Fprintln(w, string(bytes))
fmt.Fprintln(w, "&")
}
}
func main() {
http.HandleFunc("/", testFunc)
err := http.ListenAndServe(":9090", nil)
if err != nil {
log.Fatal("ListenAndServe", err)
}
}
结果: Chrome浏览器显示:
{"key":"\u0026"}
&
控制台也显示:
{"key":"\u0026"}
&
当 &
不在 JSON 中时,浏览器和控制台会打印 &
。
最佳答案
在 Go1.7 他们 have added解决此问题的新选项:
encoding/json: add Encoder.DisableHTMLEscaping This provides a way to disable the escaping of <, >, and & in JSON strings.
相关函数是
func (*Encoder) SetEscapeHTML
这应该应用于编码器。
enc := json.NewEncoder(os.Stdout)
enc.SetEscapeHTML(false)
dumbbodo 修改示例:https://play.golang.org/p/HnWGJAjqPA
关于json - 如何显示字符而不是ascii?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24656624/