在Javascript(Ajax)中检索二进制数据

时间:2012-02-01 09:01:17

标签: javascript ajax binary ascii utf

我试图让这个远程二进制文件读取字节,当然这些字节在0..255范围内。由于响应是以字符串形式给出的,因此我需要使用charCodeAt来获取每个字符的数值。我遇到了charCodeAt以UTF8返回值的问题(如果我没有弄错的话),所以例如ASCII值139被转换为8249.这弄乱了我的整个应用程序,因为我需要获取这些值,因为它们是从服务器。

立即解决方案是创建一个大开关,对于每个给定的UTF8代码将返回相应的ASCII。但我想知道是否有更优雅和更简单的解决方案。提前谢谢。

2 个答案:

答案 0 :(得分:1)

我建议编码二进制数据是一些字符编码独立格式,如base64

答案 1 :(得分:1)

以下代码摘自 StackOverflow question 的答案,可以帮助您解决问题。

function stringToBytesFaster ( str ) { 
    var ch, st, re = [], j=0;
    for (var i = 0; i < str.length; i++ ) { 
        ch = str.charCodeAt(i);
        if(ch < 127)
        {
            re[j++] = ch & 0xFF;
        }
        else
        {
            st = [];    // clear stack
            do {
                st.push( ch & 0xFF );  // push byte to stack
                ch = ch >> 8;          // shift value down by 1 byte
            }
            while ( ch );
            // add stack contents to result
            // done because chars have "wrong" endianness
            st = st.reverse();
            for(var k=0;k<st.length; ++k)
                re[j++] = st[k];
        }
    }   
    // return an array of bytes
    return re; 
}

var str = "\x8b\x00\x01\x41A\u1242B\u4123C";

alert(stringToBytesFaster(str)); // 139,0,1,65,65,18,66,66,65,35,67