我试图让这个远程二进制文件读取字节,这些字节(当然)应该在 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/