javascript - Node.JS JSON.parse UTF-8 问题

标签 javascript json node.js utf-8

我构建了一个小脚本,允许我从 Google 搜索 API 获取关键字建议。

主要问题是如果响应中包含特殊字符(如 à é ù 等):我的应用程序会返回不可读的关键字,例如:�,�a,�a va,� majuscule,ï ¿½a marche,�,�a y est,�a film,�gag,�a il est revenu,�a va de soi,,[object Object]

这是我的 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');

调用电话很容易,只需输入 http://localhost:1337/sug?KW=ç在您的浏览器中。

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

最佳答案

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

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");
});

关于javascript - Node.JS JSON.parse UTF-8 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34394537/

相关文章:

java - JsonObject 到 Java 对象

javascript - 循环遍历数组并使用每个数组值更改 html 元素

JavaScript/Firefox : "Failed to register/update ServiceWorker", 当没有使用名为 ServiceWorker 的内容时

javascript - 如何从api获取json数组

json - Twitter 流 api OAuth 未经授权

node.js - 被 Node js ssl 服务器错误消息 "Assertion failed: (wrap->ssl_) != (nullptr), file src\tls_wrap.cc, line 319"难住了

javascript - Node 集群 : Why are all requests handled by only one worker?

javascript - 从 NTLM token Javascript 获取用户名

javascript - 使用 FormData 发送 XMLHttpRequest

javascript - 使用 Node Express 后端的移动客户端 Facebook 登录