2012-12-25 14 views
8

Ecco codice php:Convertire intero array stringa in JavaScript

$arr=array(228,184,173,230,150,135,99,104,105,110,101,115,101); 
$str=''; 
foreach ($arr as $i){ 
    $str.=chr($i); 
} 
print $str; 

l'output è: 中文chinese

Ecco codice javascript:

var arr=[228,184,173,230,150,135,99,104,105,110,101,115,101]; 
var str=''; 
for (i in arr){ 
    str+=String.fromCharCode(arr[i]); 
} 
console.log(str); 

dell'output sono: 中æchinese

Quindi, come devo elaborare l'array su javascript?

+1

Quando eseguo il codice PHP, ottengo l'output 'ä¸æ- ‡ chinese'.C'è qualcosa di speciale nella tua configurazione di PHP? – Stegrex

+0

Ottengo lo stesso output esatto di @Stegrex – PhearOfRayne

+0

@Stegrex Forse è il problema delle impostazioni locali. potresti provare a cancellare il commento 'zh_CN.XXX' a'/etc/locale.gen' –

risposta

18

JavaScript costituiti da UTF-16 unità di codice, ma i numeri nel vostro array sono i byte di una stringa UTF-8. Qui è un modo per convertire la stringa, che utilizza la funzione decodeURIComponent():

var i, str = ''; 

for (i = 0; i < arr.length; i++) { 
    str += '%' + ('0' + arr[i].toString(16)).slice(-2); 
} 
str = decodeURIComponent(str); 

Esecuzione della UTF-8 a UTF-16 conversione nel modo convenzionale è probabile che sia più efficiente, ma richiederebbe più codice.

+3

+1 - Finalmente qualcuno che capisce il vero problema. – jfriend00

+1

@PleaseStand, cosa intendi per "conversione nel modo convenzionale"? A quale "via convenzionale" ti riferisci? – Pacerier

+2

Usando il metodo ho ottenuto un 'URIError: URI malformed' – Romain

-4

Fondamentalmente Javascript tratta tutto come stringa. Possiamo cambiare stringa in intero utilizzando parseInt.

Non è necessario modificare i numeri interi in stringa. Prova a seguire il codice in Javascript: stringhe

var arr=[228,184,173,230,150,135,99,104,105,110,101,115,101]; 
var str=''; 
for (i in arr){ 
    str += arr[i]; 
} 
console.log(str); 
+3

Hai provato davvero? Otterrai "228184173 ...", non quello che l'OP vuole affatto. – jfriend00

1

Il set di caratteri cinesi ha una codifica diversa in cui un carattere ha una lunghezza superiore a un byte. Quando si esegue questa operazione

for (i in arr){ 
    str+=String.fromCharCode(arr[i]); 
} 

Si sta convertendo ogni byte in un carattere (in realtà stringa) e aggiungendolo a una stringa str. Quello che devi fare è mettere insieme i byte.

ho cambiato l'array a questo e ha funzionato per me:

var arr=[20013,25991,99,104,105,110,101,115,101]; 

ho avuto questi codici da here.

potete anche dare un'occhiata a this per impacchettare i byte in una stringa.

3

Un'altra soluzione senza decodeURIComponent per caratteri fino a 3 byte (U + FFFF). La funzione presuppone la stringa è valida UTF-8, non molto controllo degli errori ...

function atos(arr) { 
    for (var i=0, l=arr.length, s='', c; c = arr[i++];) 
     s += String.fromCharCode(
      c > 0xdf && c < 0xf0 && i < l-1 
       ? (c & 0xf) << 12 | (arr[i++] & 0x3f) << 6 | arr[i++] & 0x3f 
      : c > 0x7f && i < l 
       ? (c & 0x1f) << 6 | arr[i++] & 0x3f 
      : c 
     ); 

    return s 
} 
+0

Ho provato questo con cinese, russo, ebraico e inglese, e funziona. Il codice non è molto leggibile, ma è l'approccio giusto. –

5
var arry = [3,5,7,9]; 
console.log(arry.map(String)) 

il risultato sarà ['3','5','7','9']

var arry = ['3','5','7','9'] 
console.log(arry.map(Number)) 

il risultato sarà [3,5,7,9]

+2

Stai rispondendo alla domanda sbagliata? – Pacerier

-1

Sembra che il modo migliore in questi giorni è il seguente:

function bufferToString(arr){ 
    arr.map(function(i){return String.fromCharCode(i)}).join("") 
} 
Problemi correlati