我有一点问题,我想从我们的SVN服务器(VisualSVN)请求的数据被编码为ISO-8859-1,当我尝试使用node.js https
模块请求它们时,它没有'正确编码ä,ö,ü等。
我的问题是,如何告诉节点请求数据为ISO-8859-1?
PS:我想坚持使用buildin组件,如果不可能的话,我愿意接受这些想法:)
这是我用来获取文件的代码
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
标题可能会有所帮助,但显然它没有。
答案 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
然后它完美地工作:)