Go: 请求解析 json 错误 invalid character '\\x1f’
date
Aug 4, 2024
slug
go-invalid-character
tags
后端
status
Published
summary
Go 发送 http 请求后,使用 json 对返回值进行解包,发生错误 invalid character '\\x1f’
type
Post
场景
用 Golang 写爬虫,从外部 API 获取数据。然而服务端默认开启了 gzip 压缩,导致返回的是经过压缩的字符,Golang json 库无法对其进行解包,报错。
问题描述
我们有一个函数
baiduKaifaSearch
,用于从百度开发者搜索 API 获取数据。该函数的代码如下:在调用这个函数时,我们遇到了
invalid character
错误。经过排查,发现是由于 API 返回的数据是 gzip 压缩的,而我们的代码没有处理 gzip 压缩数据。解决 1: 解压缩
为了正确处理 gzip 压缩数据,我们需要在读取响应体之前,检查响应头中的
Content-Encoding
字段,如果是 gzip
,则需要先解压缩数据。修改后的代码如下:
解决 2: 指定 Encoding
明确规定
Content-Encoding
字段,不接受任何编码。总结
在处理外部 API 返回的数据时,我们需要注意响应头中的
Content-Encoding
字段,特别是当数据可能是 gzip 压缩时。通过检查并正确处理 gzip 压缩数据,我们可以避免 invalid character
错误,确保数据能够正确解包和解析。