lunes, noviembre 26, 2007

Perdidos en ¡¿Chile?! (Parte 1 La Ida)

Este fin de semana me tocó ir a un matricidio en la quinta región. Dado eso debí arrendar un vehículo por el fin de semana, así de paso aprovechaba de traerme algunas cosas. La cosa es que obviamente tuve que viajar solo, lo que no dejaba de recordarme ciertos acontecimientos pasados en calidad de chofer saliéndome de los límites del mapa, y mi inminente necesidad de una brújula, un astrolabio y un GPS.

La cosa es que saliendo de la no muy conocida por mi 5 Sur, doblé por donde no había que doblar y luego de pasarme la otra mitad de los tags de Santiago, "aparecí" en Maipú. Dada mi absoluta desorientación decidí buscar un retorno, sin embargo tube que detenerme y buscar otro retorno, cuando vi aquél letrero verde que decía:
San Bernardo 15
Rancagua 76

Una vez "en curso", volví a pasar por los mismos tags ya mencionados y decidí seguir derecho y no doblar, no quería arriesgar perderme de nuevo. "Los Vilos queda al norte, Viña queda al norte" me dije, y seguí derecho por la 5 Norte.

Pasé un tunel, me dije "Queda poco", pague un peaje re caro y un segundo tunel "Queda menos, falta poco para Lo Vasquez" me dije, y segui manejando derecho. Nunca apareció un letrero que rezara "Viña del Mar - Valparaíso", y yo segui manejando derecho. Pasé los letreros verdes que indicaban Catapilco, Jurouro, y La Ligua, y dado mi inconmensurable desconocimiento de la geografía chilena, seguí derecho, pensando que faltaba menos.

Después de alrededor de 40 minutos sin saber si estaba o no en la ruta decidí llamar a la base "Jiuston, Jiuston tenemos un problema." El letrero verde frente a mi:
Los Molles 30

Base central me dijo que me devolviera y que buscara la comisaría más cercana. Opté por devolverme, pero no pasar donde los Sres. de verde y como no pretendía pagar otro peaje por irme por el tunel tomé la cuesta El Melón. A esas alturas yo sólo me reía, y buscaba un letrero que dijera algo conocido. Después de mucha curva, subidas y camino recto entré por La Calera, y de ahí otra odisea más, encontrara por donde llegar a Viña. Lo positivo es que al menos me encontraba en la región de Valparaíso (ex V región).

Y después de seguir mis no tan confiables instintos de conductor, llegué al Camino Internacional. Sospecho que lo pude haber tomado bastante kilómetros antes.

Y llegué a Viña, claro que después de 6 horas de viaje :-)

Y la vuelta fue menos perdida, pero igualmente miscelánea. Después les cuento.

jueves, noviembre 22, 2007

Java y la codificación de caracteres (parte 1)

ADVERTENCIA: Alto contenido técnico, posiblemente demasiado aburrido para leerlo. Tómese un café, salúdeme por mensajería instantánea o correo electrónico, o recorra Google :-)

Hoy NO hablaré ni de política, ni de fútbol, ni de acuerdos del gobierno, ni del Transantiago.

Uno de los mayores dolores de cabeza al que me he enfrentado han sido las codificaciones de caracteres en Java. A los brillantes del SII se les ocurrió que los documentos tributarios deben llegar en XML codificado en ISO-8859-1, siendo que UTF-8 es mucho más completo en cuanto a la representación de los caracteres, y siendo que ellos mismos responden en UTF-8 (inconsistencias a nivel estatal, mira que lindo...)

Por definición Java opera con UNICODE, que es a lo menos parecido a UTF-8. La codificación del Locale de casi todos los sabores de Linux que uno quisiera instalar es, por defecto, UTF-8. Y para peor, muchas de las librerías Open Source para el manejo de texto, presuponen que uno opera con UTF-8. Claro que para darse cuenta de ello hay que revisar las palabras con caracteres especiales a nivel de bytes, cosa que sinceramente casi nadie hace (si es que no he sido el único...)

Mi problema:
Convertir caracteres especiales como áéíóú ÁÉÍÓÚ ñÑ àèìòù ÀÈÌÒÙ äëïöü ÄËÏÖÜ âêîôû ÂÊÎÔÛ ºª y otras rarezas que normalmente son ingresadas por errores de tipeo, por ejemplo un espacio acentuado (' ó `) en vez de comilla simple o apóstrofe ('), a su representación HTML, donde por ejemplo la a acentuada (á) queda como á o en su defecto como &#;

Las posibles soluciones:
  1. Apache provee de una librería llamada apache.commons.lang que tiene algunos métodos para estos fines.
  2. Hacer un reemplazo contra una tabla de mapeo de caracteres.
  3. Hacer un reemplazo basado en los códigos numéricos de los caracteres especiales.

Contras:
  1. Un solo contra: Cualquiera de estas soluciones (incluso la de Apache que supone ser al menos la más pensada) supone que el String original viene en UTF-8.

Les debo los enlaces y los ejemplos concretos (estoy algo atareado, si embargo era imperante documentar públicamente estos alcances).