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

标签 javascript ajax binary ascii utf

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

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

最佳答案

以下代码是从对此 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

关于javascript - 在 Javascript (Ajax) 中检索二进制数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9093152/

相关文章:

javascript - 使用 $.ajax 将我带到一个仅包含与 json 数据值匹配的结果的页面

javascript - 只有 anchor 链接在导航栏中工作

javascript - nodejs promise 数组,我该怎么做?

javascript - jquery,将元素包装在div中

javascript - 使用 javascript 隐藏、加载和显示 div

javascript - 我尝试使用ajax删除数据但不起作用

javascript - 接收和解释内容类型为应用程序/八位字节流的十六进制数据发送时出错

c# - 在 ASP.NET MVC 中发布和读取二进制数据

javascript - 在三重奏中拆分字符串并使用javascript从右到左连接一个点

linux - Grep 显示二进制文件的文件名和找到的行 (PDF)