2012-09-13 23 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.

Cuestiones relacionadas