Node.JS JSON.parse UTF-8问题

我已经构build了一个小脚本,可以让我从GooglesearchAPI获取关键字build议。

主要问题是如果响应包含特殊字符(如àéù等):我的应用程序返回给我这些不可读的关键字:�ïïïïïïïïïïïïïïïïïïïïïïïïïïïïï¿ ,ïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïïï¿

这是我的Node.js脚本:

var express = require('express'); var request = require('request'); var app = express(); app.get('/sug', function (req, res) { var KW = req.query.KW ; console.time("Délai"); var url = "http://clients1.google.fr/complete/search?hl=fr&q=" + KW + "&json=t&client=hp"; request(url, function (err, resp, body) { body = JSON.parse(body); res.end(body.toString()); console.timeEnd("Délai"); }); }); app.listen(1337); console.log('Serveur : OK'); 

调用很容易,只需在浏览器中inputhttp:// localhost:1337 / sug?KW =ç 。

你知道如何解决这个问题并获得utf-8的工作吗?

就像vmkcom说的,这是因为响应是使用ISO-8859-1,所以你必须手动转换为utf-8。 iconv软件包可以帮助你:

 var request = require('request'); var iconv = require('iconv'); var KW = 'ç' ; console.time("Délai"); var url = "http://clients1.google.fr/complete/search?hl=fr&q=" + KW + "&json=t&client=hp"; var options = { url: url, encoding: null // << set encoding to null so request don't try to force utf-8 }; var ic = new iconv.Iconv('iso-8859-1', 'utf-8'); request(options, function (err, resp, body) { // body is a Buffer not a string, convert to utf-8 buffer then to utf-8 string body = ic.convert(body).toString('utf-8'); console.log(body); console.timeEnd("Délai"); }); 

感谢所有的帮助。 所以我使用你的反馈做了这个代码:

 var express = require('express'); var request = require('request'); var iconv = require('iconv'); var app = express(); app.listen(1337); console.log('Serveur : OK'); app.get('/sug', function (req, res) { var KW = req.query.KW; console.time("Délai"); var url = "http://clients1.google.fr/complete/search?hl=fr&q=" + KW + "&json=t&client=hp"; var options = { url: url, encoding: null // << set encoding to null so request don't try to force utf-8 }; var ic = new iconv.Iconv('iso-8859-1', 'utf-8'); request(options, function (err, resp, body) { res.set({ 'content-type': 'application/json; charset=utf-8' }); body = ic.convert(body).toString('utf-8'); body = JSON.parse(body); res.end(body.toString()); console.timeEnd("Délai"); }); }); 

它工作得很好!

HTTP://本地主机:1337 / SUG KW =%C3%A7A

ça,ça,çava,çamarche,çay est,ça电影,çail est revenu,çava de soi,çate va,ças'est bienpassé,çam'énerve,, [object Object]