【发布时间】:2014-08-14 06:59:42
【问题描述】:
我需要在 javascript 中将一个 utf-8 字符串转换为 utf-16LE,例如 iconv() php 函数。
即:
iconv("UTF-8", "UTF-16LE", $string);
输出应该是这样的:
49 00 6e 00 64 00 65 00 78 00
我发现这个函数可以解码 UTF-16LE,它工作正常,但我不知道如何做同样的编码。
function decodeUTF16LE( binaryStr ) {
var cp = [];
for( var i = 0; i < binaryStr.length; i+=2) {
cp.push(
binaryStr.charCodeAt(i) |
( binaryStr.charCodeAt(i+1) << 8 )
);
}
return String.fromCharCode.apply( String, cp );
}
结论是创建一个可以下载的二进制文件。
代码:
function download(filename, text) {
var a = window.document.createElement('a');
var byteArray = new Uint8Array(text.length);
for (var i = 0; i < text.length; i++) {
byteArray[i] = text.charCodeAt(i) & 0xff;
}
a.href = window.URL.createObjectURL(new Blob([byteArray.buffer], {'type': 'application/type'}));
a.download = filename;
// Append anchor to body.
document.body.appendChild(a);
a.click();
// Remove anchor from body
document.body.removeChild(a);
}
【问题讨论】:
-
为什么不让用户下载一个UTF8文件呢?除了字符串中的文本之外,文件中还有其他内容吗?
-
因为是可执行文件的特殊文件,如果不转换韩文等特殊字符,exe无法解析该文件。是的,有很多数值(使用函数转换:pack())。
标签: javascript encoding utf-8 utf-16