我知道 JavaScript 字符串通常 https://mathiasbynens.be/notes/javascript-encoding编码的每个字符至少占用两个字节的编码 https://stackoverflow.com/questions/8715980/javascript-strings-utf-16-vs-ucs-2(UTF-16 或 UCS-2)。
但是,在构建 Blob 时,似乎使用了不同的编码,因为当我将其读为ArrayBuffer
,对于欧元符号,返回的缓冲区长度为 3。
var b = new Blob(['€']);
根据W3C http://www.w3.org/TR/FileAPI/#blob, it is UTF-8编码。
Demo:
// Create a Blob with an Euro-char (U+20AC)
var b = new Blob(['€']);
var fr = new FileReader();
fr.onload = function() {
ua = new Uint8Array(fr.result);
// This will log "3|226|130|172"
// E2 82 AC
// In UTF-16, it would be only 2 bytes long
console.log(
fr.result.byteLength + '|' +
ua[0] + '|' +
ua[1] + '|' +
ua[2] + ''
);
};
fr.readAsArrayBuffer(b);
玩那个JSFiddle http://jsfiddle.net/uowf8qws/.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)