JayBird: Charset NONE para UTF8 - Esse lance enche o s...! [RESOLVIDO]

1 resposta
PauloBrito

Tenho um banco de dados que usa o firebird 1.0 e que a codificação está definida para NONE.

Fiz algumas comparações de códigos de caracteres com esta tabela e pude ver que os dados estão sendo gravados em ISO8859_1 (estações Windows 2000 e XP).

Estou tendo problemas para trazer caracteres acentuados em máquinas rodando Linux. Estou fazendo desta forma, resumidamente:

...
con = DriverManager.getConnection("jdbc:firebirdsql:db:/home/sismanfra/sam_nf.gdb", props);
...
ResultSet rs = (...)
String col = new String(rs.getBytes("coluna"), "ISO8859_1");
  • No Windows, funciona sem problemas tanto usando o rs.getBytes() e convertendo quanto usando rs.getString()!!

Pois bem. O valor no banco de dados contém um “”, em “ROLÂNDIA”, que aparece convertido na variável col como um “Ï”. Usei um sniffer e pude ver que o “” está sendo trazido corretamente até a minha máquina, ou seja, código 0xc2 (194), só que o método getBytes o mostra como código -17!

Usando esta tabela, dá pra ver que o “” é realmente 0xc2 e também dá pra ver que se eu pegar o último caracter da tabela e voltar 17 posições, vou cair exatamente no “Ï” (0xEF / 239)!

O que acontece? Porque o Java converte isso de forma tão estranha? Não deveria ser mamão com açúcar converter de ISO8859_1 para UTF8?

1 Resposta

PauloBrito

Resolvido. O problema era que eu estava usando o método ResultSet.getObject() numa classe que extendia ResultSet. Isso que estava zoneando os dados.

Criado 17 de novembro de 2009
Ultima resposta 18 de nov. de 2009
Respostas 1
Participantes 1