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

