Blog alskare

.Net y lo que surja

mailto y Codificación Unicode

Posted by alskare en 19/04/2009

Ya que tengo alguna que otra primavera a cuestas y que suelo ganarme la vida, entre otras cosas, impartiendo clases, reconozco que tengo alguna que otra manía. Una de estas manías está estrechamente ligada con la ortografía (u hortografía, como vi no hace mucho en el escrito de un alumno).

Hace poco, en la creación de una página web, el cliente solicitó uno de aquellos enlaces que, al hacer un clic sobre él, se abriera el cliente de correo. Para la mayor parte de clientes, sólo existe el Outlook y, sinceramente, creo que es mejor porque hace muy poquito, el jefe de una empresa en la que trabajo me comentó que quería usar el OpenOffice y, claro, iba a instalar el “gestor de correos del OpenOffice, es decir, el Ubuntu” –casi me da algo- Lástima que no sé callar, puesto que se hubiera merecido instalar este “cliente de correo” sobre el Windows XP, más que nada, por la supremacía que intentaba transmitir al hablarme del tema…

Bueno, siempre suelo irme por las ramas, así que retomo el tema inicial. El caso es que quería añadir, en una página HTML un enlace para que se abriese el Outlook del visitante al site, así que, como una vez hice un cursillo de HTML, me pongo a teclear:

<a 
  href="mailto:usuario@dominio.com
      ?subject=Solicitud de información 
      &body=Les agradecería se sirvan remitirme información adicional acerca de: 
      ">
      Texto del enlace
</a>

A partir de aquí, haces las pruebas y todo va bien, puesto que yo también suelo usar IE y Outlook. El problema empieza a sospecharse cuando recibes correos con caracteres extraños y empiezas a probar con algún explorador diferente, como Firefox. El resultado viene a ser el siguiente:

 image

¡Cáspita! Los acentos no acaban de verse como yo esperaba.

La verdad es que no sé si existe alguna solución sencilla para arreglar esto, pero entre que una vez estudié algo de codificación en la asignatura “Estructura de computadores” y que soy retorcido por naturaleza, hecho mano del VisualStudio y me pongo a intentar encontrar una solución.

Tras estar un rato buscando en las clases de .Net Framework, veo que existe una clase dedicada a la conversión entre codificaciones de caracteres, la clase System.Text.Encoding, así que no resulta difícil crear una función que convierta una serie de caracteres escritos en ASCII a Unicode:

''' <summary>
''' Devuelve la cadena pasada como parámetro en formato Unicode
''' </summary>
''' <param name="texto">Cadena de caracteres en formato ASCII extendido para 
''' traspasar a Unicode</param>
Public Function CodificaUnicode(ByVal texto As String) As String

    ' Codificación de la cadena de devolución
    Dim Codificacion As System.Text.Encoding = System.Text.Encoding.Unicode

    ' Se crea una matriz de CHAR con los carácteres de la cadena que se quiere codificar
    Dim Caracteres() As Char = texto.ToCharArray

    ' Conversión de la cadena en una matriz de Bytes
    Dim BytesCodificados() As Byte = Codificacion.GetBytes(Caracteres)

    ' Se crea un StringBuilder para poder traspasar los bytes ya codificados
    Dim sb As New System.Text.StringBuilder

    ' Bucle que añade los bytes codificados. Se puede aprovechar para poder comprobar 
    ' caracteres especiales
    For c As Integer = 0 To BytesCodificados.Length - 1
        Dim ByteActual As String = String.Format("%{0:X2}", BytesCodificados(c))

        ' Se comprueba que no se trate del carácter "especial" del separador
        If Not ByteActual.Equals("%00") Then
            sb.Append(ByteActual)
        End If
    Next

    Return sb.ToString
End Function

Por cierto, una vez aplicada la función, el enlace queda un poco más “sucio”, pero mucho más compatible:

<a 
  href="mailto:%75%73%75%61%72%69%6F%40%64%6F%6D%69%6E%69%6F%2E%63%6F%6D
      ?subject=%53%6F%6C%69%63%69%74%75%64%20%64%65%20%69%6E%66%6F%72%6D%61%63%69%F3%6E
      &body=%4C%65%73%20%61%67%72%61%64%65%63%65%72%ED%61%20%73%65%20%73%69%72%76%61%6E%20%72%65%6D%69%74%69%72%6D%65%20%69%6E%66%6F%72%6D%61%63%69%F3%6E%20%61%64%69%63%69%6F%6E%61%6C%20%61%63%65%72%63%61%20%64%65%3A
      ">
      Texto del enlace
</a>

Sorry, the comment form is closed at this time.

 
A %d blogueros les gusta esto: