He buscado algo relacionado con esto, pero no encontré nada directamente equivalente, y nada que haya ayudado. Tengo una aplicación muy simple que obtiene datos del servidor usando Ajax (vainilla Javascript) pero los caracteres Unicode no se transfieren correctamente. Mi razonamiento es que este es un problema del lado del cliente, porque si accedo a la URL de Ajax directamente desde la barra de direcciones del navegador, se muestra correctamente.
He puesto un archivo console.log en Javascript como lo primero que hace al recibir una respuesta, y ya está dañado en este punto. He agregado xmlhttp.overrideMimeType('text/plain;charset=utf-8'); pero eso no tuvo ningún efecto visible.
Creé una página web mínima que muestra el comportamiento y la puse en mi servidor en http://www.amberel.com/test/unicodetest.htm . Simplemente presione el botón para ejecutar la función Ajax. La URL de Ajax es http://www.amberel.com/test/ajaxunicodetest.htm
Esta es la página web completa:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Ajax UTF-8 test</title> <meta name="viewport" id="viewport" content="width=device-width,initial-scale=1"> </head> <body> <div id="id-div-main"> <p>What it should look like: town=Chaitén</p> <button type="button" onclick="buttonAjaxClick()">Ajax</button> <p id="id-p-response"></p> </div> </body> </html> <script> function buttonAjaxClick() { try { var xmlhttp; xmlhttp=new XMLHttpRequest(); xmlhttp.open("GET", "ajaxunicodetest.htm", true); // Didn't make any difference // xmlhttp.overrideMimeType('text/plain;charset=utf-8'); xmlhttp.send(); xmlhttp.onreadystatechange=function() { if(xmlhttp.readyState == 4) { if(xmlhttp.status == 200) { console.log(xmlhttp.responseText); document.getElementById("id-p-response").innerHTML = "Ajax response: " + xmlhttp.responseText; } else if(xmlhttp.status == 404) { document.getElementById("id-p-response").innerHTML = "ajaxunicodetest.htm not found"; } else { document.getElementById("id-p-response").innerHTML = "ajaxunicodetest status: " + xmlhttp.status; } } }; } catch(err) { document.getElementById("id-p-response").innerHTML = "ajaxunicodetest: " + err; } } </script>
Estaría muy agradecido por cualquier idea sobre qué intentar a continuación, ya que he estado trabajando en esto durante algún tiempo.
Muchas gracias Andy
Tienes que escribir para overrideMimeType:
xmlhttp.overrideMimeType('text/xml; charset=iso-8859-1');
Esta respuesta primero se escribió en los comentarios, pero después de discutir con @Amberel, funcionó para él, y la ponemos aquí para que otros también puedan verla.