UTF-16在JavaScript UTF-8转换(UTF-16 to UTF-8 conversi

2019-07-18 22:58发布

我有Base64编码的数据是在UTF-16我想对数据进行解码,但大多数图书馆只支持UTF-8。 我相信我有砸空咬,但我不知道该如何。

目前我使用大卫Chambbers填充工具为Base64的,但我也尝试过其他的库,如phpjs.org ,其中没有支持UTF-16。

有一点需要指出的是Chrome上ATOB方法适用于出的问题,火狐我得到的结果可知这里 ,并在IE中,我只返回的第一个字符。

任何帮助是极大的赞赏

Answer 1:

你想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”"


文章来源: UTF-16 to UTF-8 conversion in JavaScript