Configuración del parámetro charset de HTTP

Cuando el servidor envíe un documento a un agente de usuario (por ejemplo, un explorador), también enviará información en el campo Content-Type del encabezado adjunto de HTTP sobre el tipo de formato de datos del que se trata. Esta información se expresa mediante una etiqueta del tipo MIME. Este artículo ofrece un punto de partida para aquellos que necesiten configurar la información de codificación en el encabezado de HTTP.

Debe consultar cualquier otra sección para obtener información sobre cómo declarar la codificación de caracteres en las páginas HTML o la forma de encontrar cómo verificar la información sobre codificación de caracteres que se está enviando en el encabezado de HTTP.

El parámetro charset

Los documentos transmitidos con HTTP que son de tipo texto, como text/html, text/plain, etc., pueden enviar un parámetro charset en el encabezado de HTTP para especificar la codificación de caracteres del documento.

Es muy importante etiquetar siempre los documentos web en forma explícita. HTTP 1.1 dice que el charset predeterminado es ISO-8859-1. Sin embargo, existen demasiados documentos sin etiquetar en otras codificaciones. Por lo tanto, los exploradores utilizan la codificación preferida del lector cuando no exista ningún parámetro charset explícito.

Por lo general, la línea del encabezado de HTTP se ve de la siguiente manera:

Content-Type: text/html; charset=utf-8

En teoría, se puede utilizar toda codificación de caracteres que haya sido registrada por la Autoridad de Asignación de Cifras en Internet (IANA), pero no existe explorador alguno que comprenda todas las codificaciones. Cuanto más extenso sea el uso de una codificación de caracteres, mayor será la probabilidad de que el explorador la comprenda. La codificación Unicode, como UTF-8, es una buena opción debido a varios motivos.

Configuración del servidor

La forma de hacer que el servidor envíe la información charset adecuada depende del servidor. Necesitará los derechos administrativos correspondientes para poder cambiar la configuración del servidor.

Apache. Esto puede realizarse mediante las directivas AddCharset (Apache 1.3.10 y versiones posteriores) o AddType, para el caso de directorios o de recursos individuales (archivos). Con AddDefaultCharset (Apache 1.3.12 y versiones posteriores), es posible configurar el charset predeterminado para un servidor completo. Para obtener más información, consulte el artículo que aparece en Configuración de información 'charset' en .htaccess.

Jigsaw. Use un indexer en JigAdmin para asociar las extensiones a los charsets o configure el charset directamente en un resource.

IIS 5 y 6. En el Administrador de Servicios de Internet, haga clic con el botón derecho en "Default Web Site" (o en el sitio que desea configurar) y vaya a "Properties" => "HTTP Headers" => "File Types..." => "New Type...". Ingrese la extensión que desea mapear, en forma separada para cada extensión; es probable que los usuarios de IIS deseen mapear .htm, .html,... Luego, para Content type, agregue "text/html;charset=utf-8" (sin las comillas; reemplace el charset que desee por utf-8; no deje ningún espacio en ningún lugar, dado que IIS ignora todo tipo de texto que se encuentre después de los espacios). En el caso de IIS 4, es posible que deba usar "HTTP Headers" => "Creating a Custom HTTP Header" si lo que se indica precedentemente no funciona.

Secuencia de comandos del encabezado

El encabezado adecuado también puede configurarse en los lenguajes de secuencia de comandos del lado servidor. Por ejemplo:

Perl. Salida del encabezado correcto antes de cualquier otra parte de la página real. Después del último encabezado, use un doble corte de líneas, por ejemplo:
print "Content-Type: text/html; charset=utf-8\n\n";

Python. Use la misma solución que utilizó para Perl (a excepción de que no es necesario que el punto y coma que aparezca al final).

PHP. Use la función de header() antes de generar cualquier tipo de contenido, por ejemplo:
header ('Content-type: text/html; charset=utf-8');

Java Servlets. Use el método setContentType que aparece en el ServletResponse antes de obtener cualquier objeto (Stream o Writer) que se utilice para la salida, por ejemplo:
resource.setContentType ("text/html;charset=utf-8");
Si utiliza un Writer, el Servlet automáticamente se hace cargo de la conversión desde Java Strings hasta la codificación seleccionada.

JSP. Use la directiva page, por ejemplo:
<%@ page contentType="text/html; charset=UTF-8" %>
La salida del out.println() o los elementos de expresión (<%= object%>) se convierten automáticamente a la codificación seleccionada. Además, la página en sí misma se interpreta como parte de este codificación.

ASP y ASP.Net. ContentType y charset se configuran por separado y consisten en métodos del objeto Response. Para configurar el charset use, por ejemplo,
<%Response.charset="utf-8"%>
En ASP.Net, la configuración de Response.ContentEncoding se hará cargo tanto del parámetro charset del Content-Type de HTTP como de la codificación real del documento que se envía (la cual debe, por supuesto, ser la misma). El valor predeterminado puede configurarse en el elemento globalization en Web.config (o Machine.config, que, originariamente, se configura en UTF-8).