Menu

sexta-feira, 13 de dezembro de 2013

Conversão de caracteres do charset CP1250/CP1252 para Unicode

Quando um texto é copiado de programas como o MS Word e salvo no banco de dados, alguns caracteres poderão não ser exibidos quando convertidos para Unicode (ISO8889-1 ou UTF-8, por exemplo). Esse é o caso de Bullets () e En Dashes ().

Apesar do charset CP1250/52 do Windows ser similar ao Unicode, ele preservou alguns caracteres em suas posições originais, o que pode levar a inconsistências em alguns casos.

Para converter esses caracteres para a codificação correta do unicode precisamos apenas da tabela de conversão, que pode ser acessada aqui, e to método replaceAll da classe String. Abaixo está o método de conversão para Bullets e En Dashes:

public final static String cp1252ToUnicode(String s) {
    s.replaceAll(String.valueOf((char) 149), "\u2022");
    s.replaceAll(String.valueOf((char) 150), "\u2013");
    return s;
}

Fontes:
http://stackoverflow.com/questions/4000392/how-to-parse-word-created-special-chars-in-java
http://www.coderanch.com/how-to/java/WeirdWordCharacters

Nenhum comentário :