Go 多个unicode(如“\u7cfb”)与普通字符串混合,如何转换为普通文本

Go 多个unicode(如“\u7cfb”)与普通字符串混合,如何转换为普通文本,go,Go,这是一段http响应,我想把它写到日志中,在日志中它应该是分组数不能大于20个 不是\u5206\u7ec4\u6570\u4e0d\u80fd\u5927\u4e8e20\u4e2a 注意\u4e8e20 \u4e8e是汉字于, 20只是字面数字。 如何将变量a转换为fmt.Printlna这样的输出 不只是打印出来 我发现一些snippt,但在\u4e8e20的输出中遇到错误分组数不能大于⁎⁎ a:="\u5206\u7ec4\u6570\u4e0d\u80fd\u5927\u4e8e20

这是一段http响应,我想把它写到日志中,在日志中它应该是分组数不能大于20个 不是\u5206\u7ec4\u6570\u4e0d\u80fd\u5927\u4e8e20\u4e2a

注意\u4e8e20 \u4e8e是汉字于, 20只是字面数字。 如何将变量a转换为fmt.Printlna这样的输出

不只是打印出来 我发现一些snippt,但在\u4e8e20的输出中遇到错误分组数不能大于⁎⁎

a:="\u5206\u7ec4\u6570\u4e0d\u80fd\u5927\u4e8e20\u4e2a"
fmt.Println(a) // output: 分组数不能大于20个
http响应是

func u2s(form string) (to string, err error) {
    bs, err := hex.DecodeString(strings.Replace(form, `\u`, ``, -1))
    if err != nil {
        return
    }
    for i, bl, br, r := 0, len(bs), bytes.NewReader(bs), uint16(0); i < bl; i += 2 {
        binary.Read(br, binary.BigEndian, &r)
        to += string(r)
    }
    return
}
解决方案是json.Unmarshal,然后是json.Marshal,msg字段,然后是人类可读的
感谢@Volker@Flimzy@kostix,您的评论非常有用

变量a的值为分组数不能大于20个. 实际上,你不需要编码/解码/摆弄/替换任何东西。所有这些\u仅存在于源代码中,而不存在于运行时变量的值中。这是http响应的一个片段,我想把它写到日志中,应该在日志中分组数不能大于20个 not\u5206\u7ec4\u6570\u4e0d\u80fd\u5927\u4e8e20\U4E2A您试图解决的问题是什么?当且仅当字符串包含转义序列并用引号正确删除时:使用strconv。Unquote@user2352151,您的意思是HTTP负载实际上包含一个字节序列,如0x5c'\',0x75'u',0x53'5',…等等,以形成一个ASCII字符串,逐字读取\u5206\u7ec4\u6570\u4e0d\u80fd\u5927\u4e8e20\u4e2a?如果是,那么答案是使用strconv.Unquote-as@Volker建议的。如果数据更破碎,并且该函数无法剪切数据,则可能需要实现一个不太复杂的状态机来将这些\uxxx序列解析为Unicode符文。啊,这是一个典型的例子。请别客气。
{"code":"100001","msg":"\u5206\u7ec4\u6570\u4e0d\u80fd\u5927\u4e8e20\u4e2a","data":{}}