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

如何在NestJS的Axios GET请求中设置XML编码?

解决NestJS Axios获取XML特殊字符乱码问题

问题根源

你当前设置的Content-Type请求头用于标识发送给服务器的请求体内容类型,但GET请求通常没有请求体,这个设置对解决响应编码问题无效。浏览器能正常显示是因为它会自动检测响应编码,或服务器给浏览器返回了正确的编码标识,而Axios的自动解析逻辑可能未正确识别响应编码。

解决方案

方案1:设置Accept-Charset请求头

告诉服务器你期望接收UTF-8编码的响应:

return this.httpService.get(`mycoolurl`, {
  headers: {
    'Accept': 'text/xml',
    'Accept-Charset': 'UTF-8'
  },
})
.pipe(map((res) => {
  const parser = new XMLParser();
  return parser.parse(res.data);
}));

方案2:手动处理响应编码(兼容性更强)

如果服务器未正确返回编码标识,Axios可能用默认编码解析导致乱码。此时可以让Axios返回原始二进制数据,再手动解码为UTF-8字符串:

return this.httpService.get(`mycoolurl`, {
  headers: {
    'Accept': 'text/xml'
  },
  responseType: 'arraybuffer' // 禁止Axios自动解析响应,返回原始二进制
})
.pipe(map((res) => {
  // 手动将二进制数据解码为UTF-8字符串
  const xmlString = Buffer.from(res.data).toString('utf8');
  const parser = new XMLParser();
  return parser.parse(xmlString);
}));

关键说明

  • Accept-Charset:告知服务器优先返回指定编码的响应,部分服务器会根据这个头调整输出编码
  • responseType: 'arraybuffer':绕过Axios的自动解析逻辑,直接获取原始响应数据,避免编码解析错误
  • 解码时使用utf8编码,确保特殊字符(ü、ö、ä等)能被正确解析

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 00:52:12