1 回答
TA贡献1995条经验 获得超2个赞
根据您的十六进制转储判断您正在接收 gzip 编码的数据,因此您需要先使用compress/gzip 对其进行解码。
尝试这样的事情
package main
import (
"bytes"
"compress/gzip"
"encoding/json"
"fmt"
"io"
"some/api"
)
func main() {
content := api.SomeAPI.SomeRequest() // []byte variable
// decompress the content into an io.Reader
buf := bytes.NewBuffer(content)
reader, err := gzip.NewReader(buf)
if err != nil {
panic(err)
}
// Use the stream interface to decode json from the io.Reader
var data interface{}
dec := json.NewDecoder(reader)
err = dec.Decode(&data)
if err != nil && err != io.EOF {
panic(err)
}
fmt.Println("Data from response", data)
}
以前的
字符\x1f是 ASCII 和 UTF-8 中的单位分隔符。它永远不是 UTF-8 编码的一部分,但可用于标记文本的不同位。\x1f据我所知,一个字符串可以是有效的 UTF-8,但不是有效的 json。
我认为您需要仔细阅读 API 规范以了解他们使用\x1f标记的目的,但同时您可以尝试删除它们并查看会发生什么,例如
import (
"bytes"
"fmt"
)
func main() {
b := []byte("hello\x1fGoodbye")
fmt.Printf("b was %q\n", b)
b = bytes.Replace(b, []byte{0x1f}, []byte{' '}, -1)
fmt.Printf("b is now %q\n", b)
}
印刷
b was "hello\x1fGoodbye"
b is now "hello Goodbye"
- 1 回答
- 0 关注
- 261 浏览
添加回答
举报