Caracteres Especiais e String Java
-
12-12-2019 - |
Pergunta
Eu tenho uma string de texto (Java String) que deve conter 'gerald.o'leary'
.
Na verdade, ele contém um caractere de controle além do resto, 'c2'.Eu incluí o dump hexadecimal, por favor veja image1.png
para um despejo hexadecimal.
Quando eu salvo no banco de dados e leio novamente executando SQL em um cliente e copio e colo em um editor hexadecimal, vejo c2 substituído por 3f, consulte image2.png
.
Eu poderia ter vivido com isso, mas pelo fato de quando essas duas strings são comparadas em Java usando String.equals(), false é retornado.
Alguém pode explicar o que está acontecendo aqui?!
Solução
Você verificou se o seu banco de dados SQL pode armazenar caracteres UTF-8/Unicode (ou seja,não é ISO-8859-1, ASCII ou similar)?
- Primeiro envie a String para a saída padrão para ver se ela realmente contém o caractere correto (?está bom na saída, mas ??ou 0xC2 0x92 = ´ não é).
- Em seguida, verifique o conjunto de caracteres do seu banco de dados.Veja seu manual.
Outras dicas
Não sei como você conseguiu o despejo hexadecimal, mas as strings java são strings unicode, portanto não há correspondência 1:1 entre caracteres e bytes.Suspeito que sua string contém caracteres Unicode que não podem ser representados por bytes únicos, e seu manuseio de caracteres (que pressupõe que seja esse o caso) é problemático.