如何解决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
相关产品推荐
相关产品推荐

