Una pregunta que normalmente veo en los foros que participo, se relaciona con el tema de la codificación de una aplicación Web, normalmente se ven preguntas como: configuración para admitir caracteres como la "ñ", codificación de caracteres deseada, problema con tildes, tildes y caracteres especiales o algunas variantes más.
La mayoría de veces intentan establecer esta codificación usando el elemento HTML meta
:
html:
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
En otros lenguajes de programación como PHP esto funciona sin problemas porque no se envía automáticamente una cabecera HTTP que indique el tipo de documento y la codificación, pero en el caso de páginas que son procesadas por ASP.NET no ocurre esto, puesto que en cada documento que se envía al cliente, se especifica explícitamente el tipo y la codificación de la página. Si observamos parte del código del método GenerateResponseHeaders
de la clase HttpResponse
, se puede apreciar porque pasa eso.
csharp:
if ((this._statusCode != 0xcc
) &&
(this._contentType !=
null))
{
string text2 =
this._contentType;
if ((this._contentType.
IndexOf("charset=", StringComparison.
Ordinal) <
0) &&
(this._customCharSet ||
((this._httpWriter !=
null) &&
this._httpWriter.
ResponseEncodingUsed)))
{
string charset =
this.
Charset;
if (charset.
Length >
0)
{
text2 =
this._contentType +
"; charset=" + charset;
}
}
headers.
Add(new HttpResponseHeader
(12, text2
));
}
Si no se especifica algún otro valor para la codificación (Charset
) desde el código, este es tomado del elemento globalization
del Web.config o machine.config.
xml:
<configuration>
<system.web>
<globalization
requestEncoding="iso-8859-1"
responseEncoding="iso-8859-1"/>
</system.web>
</configuration>
En conclusión, utilizar sólo el elemento meta
en páginas procesadas por ASP.NET no es suficiente, puesto que los navegadores -- al parecer -- prefieren el valor que se envía en las cabeceras HTTP.