Javascript: 创建 UTF-16 文本文件?
Javascript: create UTF-16 text file?
我有一些字符串需要是 UTF-16 文本文件。例如:
var s = "aosjdfkzlzkdoaslckjznx";
var file = "data:text/plain;base64," + btoa(s);
这将产生一个 UTF-8 编码的文本文件。如何获取带有字符串 s
的 UTF-16 文本文件?
您可以使用原生 TextEncoder API 的遗留 polyfill 将 JavaScript 字符串转换为 ArrayBuffer。正如您将在该文档中看到的那样,支持具有任一字节顺序 is 的 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。
相关:Javascript to csv export encoding issue
应该这样做:
document.getElementById('download').addEventListener('click', function(){
downloadUtf16('Hello, World', 'myFile.csv')
});
function downloadUtf16(str, filename) {
// ref:
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:
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>
我有一些字符串需要是 UTF-16 文本文件。例如:
var s = "aosjdfkzlzkdoaslckjznx";
var file = "data:text/plain;base64," + btoa(s);
这将产生一个 UTF-8 编码的文本文件。如何获取带有字符串 s
的 UTF-16 文本文件?
您可以使用原生 TextEncoder API 的遗留 polyfill 将 JavaScript 字符串转换为 ArrayBuffer。正如您将在该文档中看到的那样,支持具有任一字节顺序 is 的 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。
相关:Javascript to csv export encoding issue
应该这样做:
document.getElementById('download').addEventListener('click', function(){
downloadUtf16('Hello, World', 'myFile.csv')
});
function downloadUtf16(str, filename) {
// ref:
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:
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>