Ver Mensaje Individual
  #1 (permalink)  
Antiguo 23/07/2011, 18:47
Avatar de Escain
Escain
 
Fecha de Ingreso: enero-2007
Mensajes: 21
Antigüedad: 17 años, 10 meses
Puntos: 3
Pregunta AJAX, al descargar binario, los caracteres 127+ se evalúan en 65533

Hola :)

He escrito un código javascript para descargar un archivo de imagen mediante una petición AJAX (El motivo es un larga historia).
Pero cuando recibo la cadena de respuesta, todos los bytes 127-255 son sustituidos por el 65533 unicode, con la obvia perdida de información.

Por ejemplo a partir de la imágen:
Código:
66 77 54 16 0 0 0 0 0 0 54 0 0 0 40 0 0 0 32 
0 0 0 32 0 0 0 1 0 32 0 0 0 0 0 0 0 0 0 19 11 
0 0 19 11 0 0 0 0 0 0 0 0 0 0 255 255 255 0 
255 255 255 0 0 0 0 28 0 0 0 65 0 0 0 37 135 
135 135 0 145 145 144 0 0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0...
..
En la cadena javascript recibida obtengo:
Código:
66 77 54 16 0 0 0 0 0 0 54 0 0 0 40 0 0 0 32 
0 0 0 32 0 0 0 1 0 32 0 0 0 0 0 0 0 0 0 19 11 
0 0 19 11 0 0 0 0 0 0 0 0 0 0 65533 65533 65533 0 
65533 65533 65533 0 0 0 0 28 0 0 0 65 0 0 0 37 65533 
65533 65533 0 65533 65533 65533 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0...
..
No tengo gran idea de cual es el problema, he buscado en muchas páginas pero al ser un error tan específico, no he encontrado nada que me saque de duda.

Aquí el código javascript simplificado:
Código:
		var http = new XMLHttpRequest();
		http.onreadystatechange = callbacksend;
		http.open("post", "http://www.miweb.com/Icon.bmp", true);
		http.setRequestHeader("Accept-Charset", "utf-8");
		http.setRequestHeader("Content-Transfer-Encoding","binary");
		http.send(null);

function callbacksend(){
	if(http.readyState == 4){
		if(http.status == 200){
			// todo ok
			for( var i=0; i < 100; i++){
				document.body.appendChild(document.createTextNode(" " + http.responseText.charCodeAt(i)));
			}			
		}
	}
};
La duda es pues: ¿porque algunos bytes son sustituidos por 65533 en el "responseText" y cómo puedo evitar/solucionar este problema?

Les agradezco a todos los que hayáis tomado el tiempo de leer este post por la atención.

Escain