我们在使用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/
我们人生中最大的懒惰,就是当我们明知自己拥有作出选择的能力,