我有Base64编码的数据是在UTF-16我想对数据进行解码,但大多数图书馆只支持UTF-8。 我相信我有砸空咬,但我不知道该如何。
目前我使用大卫Chambbers填充工具为Base64的,但我也尝试过其他的库,如phpjs.org ,其中没有支持UTF-16。
有一点需要指出的是Chrome上ATOB方法适用于出的问题,火狐我得到的结果可知这里 ,并在IE中,我只返回的第一个字符。
任何帮助是极大的赞赏
我有Base64编码的数据是在UTF-16我想对数据进行解码,但大多数图书馆只支持UTF-8。 我相信我有砸空咬,但我不知道该如何。
目前我使用大卫Chambbers填充工具为Base64的,但我也尝试过其他的库,如phpjs.org ,其中没有支持UTF-16。
有一点需要指出的是Chrome上ATOB方法适用于出的问题,火狐我得到的结果可知这里 ,并在IE中,我只返回的第一个字符。
任何帮助是极大的赞赏
你想UTF-16解码,无法转换为UTF-8。 解码装置,该结果是抽象的字符的字符串。 当然有字符串的内部编码,以及,UTF-16或在JavaScript UCS-2,但是这是一个实现细节。
随着琴弦的目标是,你不必担心编码,但只是操纵角色“因为它们”。 所以,你可以写一个并不需要在所有的解码输入字符串的方法。 当然也有很多优势情况下,这个分崩离析。
你不能仅仅通过删除空解码UTF-16。 我的意思是,这将很好地工作对Unicode的前256个码点,但是当任何Unicode的其它〜110000字符的使用,你会得到垃圾。 你甚至不能得到最流行的非ASCII字符,如破折号或工作的任何智能引号。
此外,看着你的榜样,它看起来像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”"