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:

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

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.

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