【问题标题】:Node.js & the instagram API, 'Could not decode a text frame as UTF-8'Node.js 和 instagram API,“无法将文本帧解码为 UTF-8”
【发布时间】:2012-09-20 20:41:11
【问题描述】:

我正在使用 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。

我做错了吗?

【问题讨论】:

  • 您可能需要在请求中设置接受类型。
  • 感谢您的提示,但已经设置了 'Accept' : 'application/json' 和 'Accept-Charset' : 'utf-8'

标签: javascript node.js instagram


【解决方案1】:

您可以尝试如下逃避 \u:

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

另外,为什么要将“输出”转换为对象,然后再转换回字符串,而不是将其传递给响应时收到的 websocket。

【讨论】:

  • 因为只是从 API 向浏览器发送 JSON 字符串并不是我的最终目标,所以在响应浏览器的过程中,在对对象进行字符串化之前,还会对对象进行其他处理。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2013-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-19
    • 2023-03-10
    • 2017-08-23
    相关资源
    最近更新 更多