好的,你的問題是拉丁到utf-8的轉換。如果你只是打電話給你的buffer.toString('utf-8')
,拉丁編碼的字符是錯誤的。
要將其他字符集轉換爲utf-8,簡單的使用方法是使用iconv
和icu-charset-detector
。有了這個,你可以從所有可能的字符集切換到utf-8(除了特定的字符集)。
這是一個使用流轉換的例子。結果流使用UTF-8編碼:
var charsetDetector = require("node-icu-charset-detector"),
Iconv = require('iconv').Iconv,
Stream = require('stream'),
function convertToUtf8(source, callback) {
var iconv,
charsetTestStream = new Stream.PassThrough(),
newResStream = new Stream.PassThrough();
source.pipe(charsetTestStream);
source.pipe(newResStream);
charsetDetector.detectCharsetStream(charsetTestStream, function (charset) {
if (!iconv && charset && !/utf-*8/i.test(charset.toString())) {
try {
iconv = new Iconv(charset, 'utf-8');
console.log('Converting from charset %s to utf-8', charset);
iconv.on('error', function (err) {
callback(err);
});
var convertStream = newResStream.pipe(iconv);
callback(null, convertStream);
} catch(err) {
callback(err);
}
return;
}
callback(null, newResStream);
});
}
如何將二進制數據作爲utf-8發送? – Joe