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

HTTP GET请求中UTF-8编码失效问题排查求助

匈牙利语API响应编码问题排查与修复

核心问题分析

  • GET请求错误携带请求体:你用了GET方法却调用req.write(postData),GET请求不需要发送请求体,这会导致服务器解析请求异常,返回内容的编码逻辑混乱。
  • 分块响应处理不当:在data事件中每次都写入文件,且直接拼接Buffer转字符串,会造成编码截断或转码错误——Buffer默认转字符串用utf8,但如果服务器返回的是其他编码(比如匈牙利语常用的ISO-8859-2),就会出现乱码或转义问题。
  • 未匹配服务器返回编码:盲目强制用utf8转码,没有根据服务器Content-Type头里的charset来选择对应编码。

修复后的代码

const https = require('https');
const fs = require('fs');

function apiCall() {                      
    const postData = `DateFrom=2022-11-15&DateTill=2022-11-15`;
    const options = {                                              
        protocol: 'https:',
        host: 'link.com',
        path: `/v1.1/Order/Find?${postData}`,
        method: 'GET',
        headers: {
            "Api-Key": apiKey,
        }
    };

    const req = https.request(options, (res) => {
        console.log('statusCode:', res.statusCode);
        console.log('Content-Type:', res.headers['content-type']); // 查看服务器返回的编码信息

        // 先收集所有响应分块
        const chunks = [];
        res.on('data', (d) => {                                       
            chunks.push(d);
        });

        // 响应结束后统一处理编码与写入
        res.on('end', () => {
            const contentType = res.headers['content-type'] || '';
            // 从响应头提取编码格式
            const charsetMatch = contentType.match(/charset=([^;]+)/);
            const encoding = charsetMatch ? charsetMatch[1] : 'utf8';
            
            try {
                const answer = Buffer.concat(chunks).toString(encoding);
                fs.writeFileSync(__dirname + "/logs/result.xml", answer, encoding);
                console.log('文件写入完成');
            } catch (err) {
                console.error('编码转换错误:', err);
            }
        });

        res.on("error", (err) => {                                    
            console.error('响应错误:', err);
        });

    });

    // GET请求无需写入请求体,直接结束请求
    req.on('error', (e) => {                                      
        console.error(`Hiba: + ${e}`);
    });

    req.end();
};

额外排查建议

  • 先查看打印的Content-Type值,确认服务器返回的编码类型(比如匈牙利语常见的ISO-8859-2或Windows-1250),确保转码时使用对应编码。
  • 核对API文档,确认接口要求的请求方式和参数传递规则,保证请求完全符合规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 07:35:17