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
:
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.
{
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.
<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.