我们在使用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/
浏览器内javascript 转换gbk文本到UTF8编码(chrome, firefox only)
原文:http://blog.csdn.net/onestab/article/details/43824651