Javascript:创建UTF-16文本文件

Javascript: create UTF-16 text file?

本文关键字:文本 文件 UTF-16 创建 Javascript      更新时间:2023-09-26

我有一些字符串需要是UTF-16文本文件。例如:

var s = "aosjdfkzlzkdoaslckjznx";
var file = "data:text/plain;base64," + btoa(s);

这将产生一个UTF-8编码文本文件。如何获得字符串s的UTF-16文本文件?

相关:Javascript转csv导出编码问题

应该这样做:

document.getElementById('download').addEventListener('click', function(){
	downloadUtf16('Hello, World', 'myFile.csv')
});
function downloadUtf16(str, filename) {
	// ref: https://stackoverflow.com/q/6226189
	var charCode, byteArray = [];
	// BE BOM
  byteArray.push(254, 255);
	// LE BOM
  // byteArray.push(255, 254);
  for (var i = 0; i < str.length; ++i) {
  
    charCode = str.charCodeAt(i);
    
    // BE Bytes
    byteArray.push((charCode & 0xFF00) >>> 8);
    byteArray.push(charCode & 0xFF);
    
    // LE Bytes
    // byteArray.push(charCode & 0xff);
    // byteArray.push(charCode / 256 >>> 0);
  }
  
  var blob = new Blob([new Uint8Array(byteArray)], {type:'text/plain;charset=UTF-16BE;'});
  var blobUrl = URL.createObjectURL(blob);
  
	// ref: https://stackoverflow.com/a/18197511
  var link = document.createElement('a');
  link.href = blobUrl;
  link.download = filename;
  if (document.createEvent) {
    var event = document.createEvent('MouseEvents');
    event.initEvent('click', true, true);
    link.dispatchEvent(event);
  } else {
    link.click();
  }
}
<button id="download">Download</button>

你可以使用原生TextEncoder API的遗留polyfill来将JavaScript字符串转换为ArrayBuffer。正如您将在该文档中看到的,支持端序

的UTF16。以与文本编码器兼容的方式提供UTF-16支持的库可能很快就会出现,如果它们还没有出现的话。让我们假设一个这样的库公开了一个名为ExtendedTextEncoder的构造函数。

然后您可以轻松地创建一个Blob URL以允许用户下载文件,而不需要低效的base-64转换。

像这样:

s = "aosjdfkzlzkdoaslckjznx"
var encoder = new ExtendedTextEncoder("utf-16be")
var blob = new Blob(encoder.encode(s), "text/plain")
var url = URL.createObjectURL(blob)

现在你可以用url代替你的data: URL