Los caracteres especiales se muestran como? marcas

Tengo algunos personajes especiales aquí:
http://209.141.56.244/test/char.php

pero cuando tomo este archivo a través de ajax aquí, aparecen como? marcas:
http://209.141.56.244/test/char.html

Estos caracteres deben ser “ISO-8859-1 occidentales”, pero cambiar la encoding de mi navegador a cualquiera de las opciones no ayuda.

¿Por qué es esto y cómo puedo solucionarlo?

Su servidor envía la respuesta Ajax como text/html , esto hace que el navegador asum UTF-8 (que es el predeterminado), pero sus datos en sí no son UTF-8.

Envíe la respuesta de Ajax como text/html; Charset=Windows-1252 text/html; Charset=Windows-1252 (realmente no está usando ISO-8859-1) y debería funcionar.

 header('Content-Type: text/html; Charset=Windows-1252'); 

PD: Cambiar el navegador a otro juego de caracteres no ayuda porque esto afecta solo a la página. Las respuestas subsiguientes de Ajax todavía se decodifican según sus respectivos encabezados.

Su página devuelve text/html como Content-Type , por lo que el navegador (y el script ajax) los interpreta con una encoding predeterminada dada por el contexto actual.

En php puedes forzar la encoding usando la función de encabezado para la versión html. Debes usar los archivos de configuración de apache (suponiendo que estés usando apache; de ​​lo contrario, consulta el documento de tu servidor web).

http://www.w3.org/International/O-HTTP-charset dice

Es muy importante etiquetar siempre documentos web explícitamente. HTTP 1.1 dice que el juego de caracteres predeterminado es ISO-8859-1. Pero hay demasiados documentos sin etiqueta en otras codificaciones, por lo que los navegadores utilizan la encoding preferida del lector cuando no hay un parámetro explícito de juego de caracteres.

de la misma página

Apache Esto puede hacerse a través de las directivas AddCharset (Apache 1.3.10 y posteriores) o AddType , para directorios o recursos individuales (archivos). Con AddDefaultCharset (Apache 1.3.12 y posterior), es posible establecer el juego de caracteres predeterminado para un servidor completo. Para obtener más información, consulte el artículo sobre Cómo configurar la información de ‘charset’ en .htaccess.