2012-09-13 30 views
6

estoy escribiendo una cadena binaria desde el servidor de la siguiente manera:¿Cómo leer unsigned int en Javascript?

header('Content-type: application/octet-stream'); 
echo $data = pack('C*', 0, 10, 100, 127, 128, 200, 250, 255, 256); 

y leerlo con JS y jDataView lib de esta manera:

$.get('/get', function(text) { 
    var view = new jDataView(text); 

    for (var i = 0; i < 20; i++) { 
     console.log(i, view.getUint8(i)); 
    } 
}); 

El problema es que sólo puedo leer los valores que son menos de 128. jDataView utiliza getCharCode at para leer Uint y devuelve 65533 para cada uno de los valores más grandes.

¿Cómo obtengo los valores en js?

+1

¿No está el '256' fuera de los límites? –

+0

¿Quiere decir '.charCodeAt()', ¿verdad? –

+1

@ ŠimeVidas Lo es, pero la pregunta no es sobre eso, supongo. – raina77ow

Respuesta

1

Funciona muy bien cuando cambia las cabeceras enviadas (por archivo PHP) con ...

header('Content-Type: text/plain; charset=x-user-defined')

Sin esta cabecera (y ajustar la respuesta de cómo se debe procesar XHR; this article describe el proceso en detalles) es el valor text que se convierte en un desastre: todos los caracteres 'inválidos' (> 127) serán literalmente reemplazados por '\uFFFD'.

Por supuesto, no es posible extraer los valores originales de estos caracteres, por lo que no es un error de jDataView, en mi opinión.