我无法从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);
})
})
答案 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
标头,并设置一种编码方式或另一种编码方式。