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 错误,确保数据能够正确解包和解析。

© Regir 2023 - 2025