我试图让这个远程二进制文件读取字节,当然这些字节在0..255范围内。由于响应是以字符串形式给出的,因此我需要使用charCodeAt来获取每个字符的数值。我遇到了charCodeAt以UTF8返回值的问题(如果我没有弄错的话),所以例如ASCII值139被转换为8249.这弄乱了我的整个应用程序,因为我需要获取这些值,因为它们是从服务器。
立即解决方案是创建一个大开关,对于每个给定的UTF8代码将返回相应的ASCII。但我想知道是否有更优雅和更简单的解决方案。提前谢谢。
答案 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