doutangqi4444 2015-03-27 15:26
浏览 204

golang转换包含unicode的字节数组

type MyStruct struct {
    Value json.RawMessage `json:"value"`
}

var resp *http.Response

if resp, err = http.DefaultClient.Do(req); err == nil {
    if resp.StatusCode == 200 {
        var buffer []byte
        if buffer, err = ioutil.ReadAll(resp.Body); err == nil {

            mystruct = &MyStruct{}
            err = json.Unmarshal(buffer, mystruct)

        }
    }
}

fmt.Println(string(mystruct.Value))

it produces something like:

   \u003Chead>
  \u003C/head>
  \u003Cbody>

Doc at: http://golang.org/pkg/encoding/json/#Unmarshal

says: When unmarshaling quoted strings, invalid UTF-8 or invalid UTF-16 surrogate pairs are not treated as an error. Instead, they are replaced by the Unicode replacement character U+FFFD.

I kinda think this is what is going on. I just can't see the answer as my experience with go is minimal and I'm tired.

  • 写回答

2条回答 默认 最新

  • dongmu5815 2015-03-27 16:11
    关注

    You decided to use json.RawMessage to prevent parsing of the value with key value in your json message.

    The string literal "\u003chtml\u003e" is a valid json representation of "<html>".

    Since you told json.Unmarshal not to parse this part, it does not parse it and returns it to you as-is.

    If you want to have it parsed into an UTF-8 string, then change the definition of MyStruct to:

    type MyStruct struct {
        Value string `json:"value"`
    }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图