构造Blob时的字符串编码

时间:2014-12-23 20:31:05

标签: javascript encoding utf-8

我知道JavaScript字符串are usually编码with an encoding taking at least two bytes per character(UTF-16或UCS-2)。

但是,在构造Blob时,似乎使用了不同的编码,因为当我将其读作ArrayBuffer时,返回的缓冲区的长度为3,表示欧元符号。

var b = new Blob(['€']);

1 个答案:

答案 0 :(得分:2)

根据W3C UTF-8 编码。

演示:

// 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上播放。