0

我有一个非常简单的使用 Node.js 的 JavaScript。该脚本的目的是:

  • 打开一个监听套接字
  • 使用 HTTP 函数 GET 为 URL /test 添加处理程序
  • 当请求 /test 时,应获取位于另一个外部网站上的另一个 URL。本网站采用 ISO-8859-1 编码
  • 从外部网站返回的数据应打包成 JSON 结构,并以 UTF-8 编码返回给请求客户端

到目前为止,我已经创建了以下代码:

var Buffer = require('buffer').Buffer;
var iconv  = require('iconv-lite');
var urllib = require('url');
var restify = require('restify');
var server = restify.createServer();

server.use(restify.bodyParser());
server.get('/test', test);
server.listen(8080, function() {
  console.log('%s listening at %s', server.name, server.url);
});

function test(req, res, next) {
    console.log('TEST');

    var httpClient = restify.createStringClient({ url: "http://dl.dropboxusercontent.com" });
    httpClient.get("/u/815962/iso-8859-1.html", function(cerr, creq, cres, cdata) {
        cdata = iconv.decode(cdata, 'iso-8859-1');

        res.send(200, {"Data": cdata}); 
    });     
}

我已经设置了上面代码中使用的测试文档。测试文件采用 ISO-8859-1 编码,内部有国家字母“ÅÄÖåäö”。当返回给客户端时,如果读取为 UTF-8,我会收到“ýýýýýý”

4

1 回答 1

0

看起来这确实是 Restify 中的一个错误。以下示例显示了使用 Restify 和 Request lib 的不同结果:

var request = require('request');                                               
var iconv = require('iconv');                                                   
var restify = require('restify');
var ic = new iconv.Iconv('iso-8859-1', 'utf-8');                              

request.get({ url: 'http://dl.dropboxusercontent.com/u/815962/iso-8859-1.html', encoding: null, }, function(err, res, body) {      
    var buf = ic.convert(body);                                                   
    var utf8String = buf.toString('utf-8');  
    console.log(utf8String);
});  

var httpClient = restify.createStringClient({ url: "http://dl.dropboxusercontent.com" });
httpClient.get("/u/815962/iso-8859-1.html", function(cerr, creq, cres, cdata) {
    var buf = ic.convert(cdata);                                                   
    var utf8String = buf.toString('utf-8'); 
    console.log(utf8String);
});     

我已经在 github 上浏览了 Restify 的代码,试图找到问题,但我不能

于 2013-09-27T23:26:31.300 回答