Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Node.js&;instagram API和#x27;无法将文本帧解码为UTF-8';_Javascript_Node.js_Instagram - Fatal编程技术网

Javascript Node.js&;instagram API和#x27;无法将文本帧解码为UTF-8';

Javascript Node.js&;instagram API和#x27;无法将文本帧解码为UTF-8';,javascript,node.js,instagram,Javascript,Node.js,Instagram,我正在使用http node.js模块进行一个简单的instagram API调用。只是一个简单的请求,如下所示: getJSON : function(options, on_result, on_error) { var req = http.request(options, function(res) { var output = ''; res.setEncoding('utf8'); res.on('data', funct

我正在使用http node.js模块进行一个简单的instagram API调用。只是一个简单的请求,如下所示:

getJSON : function(options, on_result, on_error) {

    var req = http.request(options, function(res) {

        var output = '';
        res.setEncoding('utf8');

        res.on('data', function (chunk) {
            console.log(chunk);
            return output += chunk;
        });

        return res.on('end', function() {
            var obj = JSON.parse(output);
            on_result(res.statusCode, obj);
        });
    });

    req.on('error', function(err) {
        on_error(err);
    });

    return req.end();
}
on_result函数只是使用JSON.stringify将其字符串化,并使用以下函数通过web套接字发送:

var connection = request.accept(null, request.origin);
connection.sendUTF(JSON.stringify(obj));
当我启动节点服务器并将浏览器指向我的url时,我从chrome和firefox获得以下信息:

无法将文本帧解码为UTF-8

我昨天运行这个绝对没有问题

在http“on data”功能中,我将数据注销到控制台,屏幕上显示的内容看起来正常,但某些转义字符如下:

"text":"\ud83d\ude1d\ud83d\ude02\ud83d\udc4f\ud83d\udc8b"
"full_name":"\ud83c\uddee\ud83c\uddf9\u21e8\u261eSara\u261c\u21e6\ud83c\uddee\ud83c\uddf9"
然后,当JSON字符串化时,这些转义序列变成:

"text":"<d83d><de1d><d83d><de02><d83d><dc4f><d83d><dc8b>"
"full_name":"<d83c><ddee><d83c><ddf9>â¨âSaraââ¦<d83c><ddee><d83c><ddf9>"
“文本”:
“全名”:“莎拉”
这就解释了为什么浏览器抱怨UTF-8


我做错什么了吗

您可以按如下方式尝试转义\u:

    return res.on('end', function() {
        var escaped_output = output.replace(/\\u/g, "\\\\u");  //<--
        var obj = JSON.parse(escape_output);
    });
返回res.on('end',function(){

var escaped\u output=output.replace(/\\u/g,“\\\\u”);//您可以按如下方式尝试转义\u:

    return res.on('end', function() {
        var escaped_output = output.replace(/\\u/g, "\\\\u");  //<--
        var obj = JSON.parse(escape_output);
    });
返回res.on('end',function(){

变量转义\u输出=输出。替换(/\\u/g,“\\\\u”);//我已经确定数据是这样来自instagram的,除了尝试转义或删除非utf-8字符外,没有什么可以做的。因为只有某些字段是这样的,我的应用程序不需要这些字段,所以我可以绕过它。

我已经确定数据是来自instagram的除了尝试转义或删除非utf-8字符之外,没有什么可以做的。因为只有某些字段是这样的,并且我的应用程序不需要这些字段,所以我可以绕过它。

您可能需要在请求中设置接受类型。感谢提示,但已经设置了“接受”:“application/json”和“Accept Charset”:“utf-8”您可能需要在请求中设置Accept类型。感谢您提供的提示,但是已经设置了“Accept”:“application/json”和“Accept Charset”:“utf-8”,因为我的最终目标不是仅从API向浏览器发送json字符串,因此在请求期间对对象进行字符串化之前,还需要对其执行其他操作响应浏览器。因为仅仅从API向浏览器发送JSON字符串并不是我的最终目标,所以在响应浏览器的过程中,在对对象进行字符串化之前,还需要对其执行其他操作。