pedroescudero.info Sobre programación, tecnología, etc

26may/080

Problemas de cotejamiento con Java, iText y JSP (Actualización)

Atendiendo a la documentación veamos las opciones que hay para cambiar la codificación de una String. La primera opción sería usar este constructor, como hacíamos en el ejemplo publicado anteriormente.

String(byte[] bytes, String charsetName)
Constructs a new String by decoding the specified array of bytes using the specified charset.

Según dice: "Construye una nueva String decodificando el array de bytes usando el juego de caracteres especificado". Usando esto decodificamos el array, que está ya codificado en un juego de caracteres, usando la codificación de otro juego de caracteres que escojamos. Esto es válido para los caracteres que ocupan posiciones compartidas en ambos juegos de caracteres, no para aquellos que no están incluidos en ambos que se siguen viendo mal.

Por otro lado tenemos el siguiente método.

byte[] getBytes(String charsetName)
Encodes this String into a sequence of bytes using the named charset, storing the result into a new byte array.

"Codifica este String en una secuencia de bytes usando el juego de caracteres nombrado y guardando el resultado en un nuevo array de bytes". Es decir, este método si traduce entre juegos de caracteres (codifica los bytes según la codificación del nuevo juego de caracteres), consiguiendo con esto que todos los caracteres se vean correctamente.

Para recodificar correctamente una String a UTF-8 usaremos entonces la siguiente línea.

String recodificada = new String(vieja.getBytes("UTF-8"));

Ver post anterior

6feb/080

Problemas de cotejamiento con Java, iText y JSP

En una web que estoy desarrollando en JSP, me surgió un problema, la web exporta unos informes en PDF usando las librerías iText de Bruno Lowagie y Paulo Soares. Había claseado varios bloques de texto que se repetían en el informe para hacer mas cómodo el proceso de generar el documento. El documento se genera a través de una página JSP que llama a las clases "bloque". El PDF generado contenía caracteres "raros" en los acentos, eñes, símbolos de euro(€), etc, cosa que no ocurría si se generaba a través del método main() de una clase Java. El conflicto estaba en el servidor web, aunque la codificación de caracteres de la página esté establecida correctamente (UTF-8 en mi caso) el servidor cuando recibe el GET o el POST altera esta codificación. El resultado son errores de cotejamiento que hacen que se muestren caracteres raros en el documento. Para resolverlo me he asegurado que la cadena de caracteres se codifica correctamente de la siguiente manera.

Partimos de una objeto de tipo string

String original = "Soy un objeto String";

Lo transformamos en un array de bytes

bytes[] intermedio = original.getBytes() ;

Creamos un nuevo objeto String con una codificación específica, en mi caso UTF-8

String bienCodificado = new String(intermedio, "UTF-8");

Referencias: String, Charset