Categories
.NET ASP.NET Web

Enviar la codificación adecuada en aplicaciones Web (ASP.NET)

Utilizar el elemento HTML meta en páginas procesadas por ASP.NET no es suficiente, puesto que los navegadores prefieren los valores que se envían en las cabeceras HTTP.

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.

One reply on “Enviar la codificación adecuada en aplicaciones Web (ASP.NET)”

Es un tema interesante el cual debería ser ampliado principalmente porque no expone una solución definitiva al problema tratado.

Comments are closed.