使用ISO-8859-1编码发送请求

时间:2014-10-10 10:14:26

标签: node.js svn visualsvn-server

我有一点问题,我想从我们的SVN服务器(VisualSVN)请求的数据被编码为ISO-8859-1,当我尝试使用node.js https模块请求它们时,它没有'正确编码ä,ö,ü等。

我的问题是,如何告诉节点请求数据为ISO-8859-1?

PS:我想坚持使用buildin组件,如果不可能的话,我愿意接受这些想法:)

编辑1

这是我用来获取文件的代码

exports.getSvnFile = function (path, auth, callback) {
    var options = {
        host: app.getSetting('svnserver'),
        method: 'GET',
        path: '/svn/' + encodeURIComponent(path).replace(/%2F/g, '/'),
        auth: tools.readFromSession(auth, 'username') + ':' + tools.readFromSession(auth, 'password'),
        headers: {
            'Accept-Charset': 'iso-8859-1'
        }
    }
    try {
        https.request(options, function (res) {
            var result = []
            try {
                console.log('STATUS: ' + res.statusCode)
                console.log('CONTENT-TYPE: ' + res.headers['content-type'])
                var data = ''
                res.on('data', function (chunk) {
                    data += chunk
                })
                res.on('end', function () {
                    callback(data, res.headers['content-type'])
                })
                res.on('error', function (err) {
                    console.error(err)
                })
            } catch (ex) {
                console.error(ex)
            }
        }).end()
    } catch (ex) {
        console.error(ex)
        callback([])
    }
}

res.end部分被调用时,我得到的数据已经被破坏了。我想也许Accept-Charset标题可能会有所帮助,但显然它没有。

1 个答案:

答案 0 :(得分:0)

我可能有解决方案,对我来说至少它有效:)

以上是调整后的代码:

exports.getSvnFile = function (path, auth, callback) {
    var options = {
        host: app.getSetting('svnserver'),
        method: 'GET',
        path: '/svn/' + encodeURIComponent(path).replace(/%2F/g, '/'),
        auth: tools.readFromSession(auth, 'username') + ':' + tools.readFromSession(auth, 'password')
    }
    try {
        https.request(options, function (res) {
            var result = []
            res.setEncoding('binary')
            try {
                console.log('STATUS: ' + res.statusCode)
                console.log('CONTENT-TYPE: ' + res.headers['content-type'])
                var data = ''
                res.on('data', function (chunk) {
                    data += chunk
                })
                res.on('end', function () {
                    callback(data, res.headers['content-type'])
                })
                res.on('error', function (err) {
                    console.error(err)
                })
            } catch (ex) {
                console.error(ex)
            }
        }).end()
    } catch (ex) {
        console.error(ex)
        callback([])
    }
}

除了一件事,几乎相同,编码设置为binary然后它完美地工作:)