httpnode.jsモジュールを使用して単純なInstagramAPI呼び出しを行っています。このような単純なリクエスト:
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について不平を言う理由を説明しています。
私は何か間違ったことをしていますか?