浏览器内javascript 转换gbk文本到UTF8编码(chrome, firefox only)

时间:2022-12-27 14:06:41

我们在使用xmlhttprequest获取文本内容时,如果服务器返回的是gbk(或gb2312等非utf8编码)内容,那么得到的是一堆乱码,如何转换为浏览器内默认的utf8编码的文字?

其实如果您使用的是chrome 或 firefox浏览器,则非常简单,可以使用浏览器内置对象TextDecoder进行转换。

javascript示例代码:

if ('TextDecoder' in window) {
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();
}
其实不只是gbk, 只要是浏览器支持的编码(见链接3),都可以轻松进行转换。
参考:

1. https://developer.mozilla.org/en-US/docs/Web/API/TextDecoder

2. Easier ArrayBuffer String conversion with the Encoding API

3. https://encoding.spec.whatwg.org/