nodejs with express和request如何支持utf8

时间:2014-06-19 06:18:26

标签: node.js encoding

首先,我要注意我是所有这些nodejs的新手。 也许问题不值得使用任何字节 - 但让我们看看。

我正在尝试在网站上获取一些数据。 请看这里我的代码片段:

app.get('/scrape', function (req, res) {

request({
    uri: 'http://www.admin.ch/index.php',
}, function (err, response, body) {
    var self = this;
    self.items = new Array(); 

    if (err && response.statusCode !== 200) {
        console.log('Request error.');
    }
    //jsdom please attach jQuery in the scripts
    jsdom.env({
        html: body,
        scripts: ['http://code.jquery.com/jquery-2.1.1.min.js'],
        done: function(errors, window) {
        var $ = window.jQuery;
        $body = $('body'),
        $threads = $body.find('a:not([href$=\'958206\'])');
        $threads.each(function (i, item) {
             self.items[i] = {
                href:  $(item).attr('href'),
                title: $(item).text().trim(),
                urlObj: url.parse($(item).attr('href'), true) 
            };
        });

    //render a view
        res.render('list', {
            layout: 'layout.jade',
            title: 'Admin YourSelf',
            items: self.items
        });
      }
    });
});

});

到目前为止,一切都正常运作。 唯一的问题是我无法获得正确的数据编码。

Duh ttestortortStenmplatz auf immer(o.T。)

应该

Duhättestortnen Stammplatz auf immer(o.T。)

任何想法如何解决这个问题?

先谢谢你和鱼, sCHween

1 个答案:

答案 0 :(得分:1)

您可以使用iconv-lite转换ISO-8859-1:

var request = require("request");
var iconv  = require('iconv-lite');

request({
encoding: null,
uri: 'http://www.admin.ch/index.php',
}, function (err, response, body) {
      var Utf8String = iconv.decode(new Buffer(body), "ISO-8859-1");
});