golang中 json.Marshal 特殊字符转义问题

       模拟了一个http服务器,在对json进行格式化之后,http客户端(我用的是postman)收到了json,我发现json中有转义字符 "\u002",但符号 & 消失了。

      查了相关资料,发现是我的用的json.Marshal方法的原因。json.Marshal方法会把部分字符转为转移字符,从而方便前端的把JSON转为HTML。

     查了部分资料,有这样的描述: 

      GoDoc描述:String values encode as JSON strings coerced to valid UTF-8, replacing invalid bytes with the Unicode replacement rune. The angle brackets “<” and “>” are escaped to “\u003c” and “\u003e” to keep some browsers from misinterpreting JSON output as HTML. Ampersand “&” is also escaped to “\u0026” for the same reason. This escaping can be disabled using an Encoder that had SetEscapeHTML(false) alled on it.

     也就是说:json.Marshal 默认 escapeHtml 为true,会转义 <、>、&

     如果是HTML客户端,则不用管这个,但如果是仅仅是用http作为中转,json不需要转义,则可以用 json.NewEncoder方法,示例如下: 

bf := bytes.NewBuffer([]byte{})
jsonEncoder := json.NewEncoder(bf)
jsonEncoder.SetEscapeHTML(false)
jsonEncoder.Encode(rsp)
fmt.Println(bf.String())

  其中,bf.String()即为不转义输出。

   参考文献:

   [1] https://blog.csdn.net/lihao19910921/article/details/81534286

   [2]https://www.golangtc.com/t/563036c8b09ecc3ac5000005

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值