构造 Blob 时的字符串编码

2024-02-12

我知道 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(使用前将#替换为@)

构造 Blob 时的字符串编码 的相关文章

随机推荐