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.

enter image description here

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.

enter image description here

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?!

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top