https.get()不返回UTF-8字符

时间:2018-07-07 16:48:36

标签: node.js xml https

我无法从xml文件中获取土耳其语字符。即使我将编码设置为utf-8,它们也似乎是问号。

https.get("https://clients1.google.com/complete/search?hl=tr&output=toolbar&q=mustafa kemal", (res) => {
            res.setEncoding("utf-8");
            var body = '';
            res.on('data', (d) => {
                body += d;
            })
            res.on('end', function(){
               console.log(body);
            })
        })

1 个答案:

答案 0 :(得分:1)

问题在于响应内容类型不在utf8中,而在ISO-8859-9

要检查是否这样做:

console.log(res.headers);

{
    date: 'Sat, 07 Jul 2018 17:02:46 GMT',
    expires: 'Sat, 07 Jul 2018 17:02:46 GMT',
    'cache-control': 'private, max-age=3600',
    'content-type': 'text/xml; charset=ISO-8859-9',
    p3p: 'CP="This is not a P3P policy! See g.co/p3phelp for more info."',
    server: 'gws',
    'x-xss-protection': '1; mode=block',
    'x-frame-options': 'SAMEORIGIN'
}

因此,如果您这样做:res.setEncoding('binary');将会很好。


如果您发送utf8标头,则该请求将返回ISO-8859-9而不是User-Agent

const options = {
    hostname: 'clients1.google.com',
    path: '/complete/search?hl=tr&output=toolbar&q=mustafa+kemal',
    method: 'GET',
    headers: {
        'User-Agent': 'Mozilla/5.0'
    }
};


https.get(options, (res) => {

    res.setEncoding('utf8');

    var body = '';

    res.on('data', (d) => {
        body += d;
    })

    res.on('end', function() {
        console.log(body);
    })
});

因此,总而言之,您应该检查响应中的Content-Type标头,并设置一种编码方式或另一种编码方式。