You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决R语言读取API JSON时的‘Unrecognized content encoding type’报错

解决R中fromJSON读取UTF-8编码API JSON的问题

我之前也碰到过完全一样的坑!直接用fromJSON()传入API URL时,它底层依赖的curl库对UTF-8编码的响应经常处理出错,特别是当服务器返回的响应头编码标识不规范的时候。这里有两个靠谱的解决方案,帮你绕开这个问题:

方法1:用httr包手动处理响应编码

httr包在HTTP响应的编码处理上更灵活,我们可以先拿到规范编码的响应文本,再转成dataframe:

# 没装httr的话先安装
install.packages("httr")
library(httr)
library(jsonlite)

# 发送请求并指定UTF-8编码提取内容
resp <- GET(myApi)
json_content <- content(resp, "text", encoding = "UTF-8")

# 转换为目标dataframe
df <- fromJSON(json_content)

方法2:用基础包readLines直接读取编码

如果不想额外安装包,用R基础函数也能搞定:

library(jsonlite)

# 读取URL内容,强制指定UTF-8编码
json_lines <- readLines(myApi, encoding = "UTF-8")
# 把多行内容合并成单个完整的JSON字符串
json_text <- paste(json_lines, collapse = "")

# 转成dataframe
df <- fromJSON(json_text)

为什么这两种方法能解决问题?

直接调用fromJSON(myApi)时,它会自动创建HTTP连接,但curl库只会识别deflate或gzip类型的内容编码。如果服务器错误地把UTF-8当成"内容编码"返回(这其实不符合HTTP规范,UTF-8属于字符编码而非内容编码),就会触发你遇到的那个报错。手动先把内容以UTF-8编码读取成纯文本,再交给fromJSON()解析,就能绕开curl的编码检测逻辑,自然就能正常转换了。

另外建议你确保jsonlite是最新版本,旧版本的编码处理逻辑可能存在bug,用update.packages("jsonlite")更新后再试试效果会更好。

内容的提问来源于stack exchange,提问作者reineckeonline

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:10:59