2013-11-21 237 views
0

我从SOAP服务器获取响应,它是一个字节数组,固定大小。如何在javascript中将字节数组转换为字符串

举例来说,我得到{ rsp: { errorNumber: '1', errorMessage: { item: [Object] } } }

[ '73', 
    '110', 
    '118', 
    '97', 
    '108', 
    '105', 
    '100', 
    '32', 
    '112', 
    '97', 
    '115', 
    '115', 
    '119', 
    '111', 
    '114', 
    '100', 
    '0'] 

如何开启数组的字符串时,它的JavaScript?

+0

'array.join( '')'? – karthikr

+0

你只是想让该数组成为一个字符串? '的console.log([ '73', '110', '118', '97', '108', '105', '100', '32', '112', '97', '115', '115', '119', '111', '114', '100', '0']的toString());' – brbcoding

+0

'字符串.fromCharCode.apply(String,arr);' –

回答

3

每个 “字节” 数组中实际上是一个字符的ASCII码。 String.fromCharCode会将每个代码转换为一个字符。

它实际上支持的参数无限多的,所以你可以这样做:

String.fromCharCode.apply(String, arr); 

当你的阵列上运行你:"Invalid password"

由于@Ted Hopp指出,0在最后将添加一个空字符的字符串。要删除它,只需:.replace(/\0/g,'')

String.fromCharCode.apply(String, arr).replace(/\0/g,''); 
+0

你怎么知道这是ASCII编码? OP没有发布响应的XML标题。我会承认它很可能是utf-8(与实际使用的范围内的ASCII一致),实际上它可以是任何东西。并非所有有效的编码都与提供的代码范围内的ASCII码一致。 –

+0

@TedHopp:我不知道编码,但它恰好是ASCII。我只是假设,当我测试它,并得到了“无效的密码”。所以,我认为我的假设是好的:-) –

+0

是的,我确定它是UTF-8(或ASCII或ISO-8859)。他们都同意OP发布的代码范围。我只是说你在做一个假设,即OP需要确认,特别是如果某些其他答案不在基本拉丁区块中。 –

2

这里是你想要的东西,在String.fromCharCode功能:

var foo = [ 
    '73', 
    '110', 
    '118', 
    '97', 
    '108', 
    '105', 
    '100', 
    '32', 
    '112', 
    '97', 
    '115', 
    '115', 
    '119', 
    '111', 
    '114', 
    '100', 
    '0']; 

var str = ''; 
for (var i=0; i<foo.length; ++i) { 
    str+= String.fromCharCode(foo[i]); 
} 

console.log(str); 

或者更好:

var str = String.fromCharCode.apply(null, foo); 
+0

你真的想在字符串的末尾输入零字符吗? –

+0

@TedHopp:它只是返回一个空白字符串,所以它不会做任何有害的事情。 –

+0

@RocketHazmat - 实际上,它返回一个包含'\ u0000'的字符串,而不是空白。它可以搞砸字符串比较和其他处理,取决于正在做什么。这个答案还假定代码是Unicode的,当它们可以完全处于另一种编码中时。 –

2

这里有一个比较另类的使用地图:

var str = arr.map(String.fromCharCode).join(""); 
相关问题