utf 8 - JavaScript 中的 UTF-16 到 UTF-8 转换
utf 8 - UTF-16 to UTF-8 conversion in JavaScript
我有 UTF-16 的 Base64 编码数据,我正在尝试解码数据,但大多数库仅支持 UTF-8。我相信我必须放弃空咬,但我不确定如何。
目前我正在使用David Chambbers Polyfill进行Base64,但我也尝试了其他库,例如 phpjs.org,它们都不支持UTF-16。
需要指出的一件事是在Chrome上,atob方法在没有问题的情况下工作,Firefox我得到了这里描述的结果,而在IE中,我只返回第一个字符。
任何帮助都非常感谢
您要解码 UTF-16,而不是转换为 UTF-8。解码意味着结果是一串抽象字符。当然,字符串也有内部编码,javascript中的UTF-16或UCS-2,但这是一个实现细节。
使用字符串的目标是您不必担心编码,而只需担心"按原样"操作字符。因此,您可以编写根本不需要解码输入的字符串方法。当然,在很多边缘情况下,这种情况会分崩离析。
不能仅通过删除空值来解码 utf-16。我的意思是这对于 unicode 的前 256 个代码点来说效果很好,但你会得到当使用 Unicode 中的任何其他 ~110000 个字符时,垃圾。您甚至无法获得最流行的非ASCII字符,例如em dash 或任何智能引号工作。
另外,看看你的例子,它看起来像 UTF-16LE。
//Braindead decoder that assumes fully valid input
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 );
}
var base64decode = atob; //In chrome and firefox, atob is a native method available for base64 decoding
var base64 = "VABlAHMAdABpAG4AZwA";
var binaryStr = base64decode(base64);
var result = decodeUTF16LE(binaryStr);
现在,您甚至可以让智能报价工作:
var base64 = "HCBoAGUAbABsAG8AHSA="
var binaryStr = base64decode(base64);
var result = decodeUTF16LE(binaryStr);
//"“hello”"
相关文章:
- 如何在JavaScript中将字符串转换为函数引用
- JavaScript ascii 到 utf-8 的转换问题与负数
- 在 JavaScript 中将 UTF-8 字符串转换为 Windows-1250
- 将 iso-8859-1 转换为 utf-8 JavaScript
- Javascript表单缩短-UTF-8转换编码
- 在Node.js中从Windows-1251转换到UTF-8
- Javascript将数字转换为utf-8
- 如何在javascript中将utf-8字符串转换为unlencoded win1251
- 将字符串转换为UTF-16(以及更多格式化)
- Javascript将字符串从GBK转换为utf-8
- Node.js将字符串从ISO-8859-2转换为UTF-8
- 将UTF-8数据转换为适当的字符串格式
- 如何将此字符串转换为普通的utf-8字符串?
- 在Java中将ANSI转换为UTF-8
- 使用JavaScript (UTF-8)将隐式字符串转换为可读字符串
- Javascript将文本从希腊语转换为UTF-8
- 如何在JavaScript中将DOM节点文本值转换为UTF-8
- utf 8 - JavaScript 中的 UTF-16 到 UTF-8 转换
- 我们可以用javascript将ANSI编码的CSV文件转换为utf-8编码的文件
- 将ISO-8859-1转换为UTF-8