我们在使用xmlhttprequest获取文本内容时,如果服务器返回的是gbk(或gb2312等非utf8编码)内容,那么得到的是一堆乱码,如何转换为浏览器内默认的utf8编码的文字?
其实如果您使用的是chrome 或 firefox浏览器,则非常简单,可以使用浏览器内置对象TextDecoder进行转换。
javascript示例代码:
if ('TextDecoder' in window) {其实不只是gbk, 只要是浏览器支持的编码(见链接3),都可以轻松进行转换。
var files = {
'gbk.txt': 'gbk'
};
Object.keys(files).forEach(function(file) {
fetchAndDecode(file, files[file]);
});
} else {
console.error('Your browser does not support the Encoding API.');
}
function fetchAndDecode(file, encoding) {
var xhr = new XMLHttpRequest();
xhr.open('GET', file);
xhr.responseType = 'arraybuffer';
xhr.onload = function() {
if (this.status == 200) {
var dataView = new DataView(this.response);
var decoder = new TextDecoder(encoding);
var decodedString = decoder.decode(dataView);
console.info(decodedString);
} else {
console.error('Error while requesting', file, this);
}
};
xhr.send();
}
参考:
1. https://developer.mozilla.org/en-US/docs/Web/API/TextDecoder
2. Easier ArrayBuffer String conversion with the Encoding API