2013-11-21 402 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(""); 
相關問題