Pregunta

Tengo una cadena de texto (Java String) que debería contener 'gerald.o'leary'.

En realidad contiene un carácter de control además del resto, 'c2'.He incluido el volcado hexadecimal, consulte image1.png para un volcado hexadecimal.

enter image description here

Cuando lo guardo en la base de datos y lo vuelvo a leer ejecutando SQL en un cliente y copio y pego en un editor hexadecimal, veo c2 reemplazado por 3f, consulte image2.png.

enter image description here

Podría haber vivido con ello, pero cuando estas dos cadenas se comparan en Java usando String.equals(), se devuelve false.

¿Alguien puede explicar qué está pasando aquí?

¿Fue útil?

Solución

¿Verificó si su base de datos SQL puede almacenar caracteres UTF-8/Unicode (es decir,¿No es ISO-8859-1, ASCII o similar)?

  • Primero envíe la cadena a la salida estándar para ver si realmente contiene el carácter correcto (?está bien en la salida, pero??o 0xC2 0x92 = ´ no lo es).
  • Luego verifique el juego de caracteres de su base de datos.Ver su manual.

Otros consejos

No sé cómo obtuviste el volcado hexadecimal, pero las cadenas de Java son cadenas Unicode, por lo que no hay correspondencia 1:1 entre caracteres y bytes.Sospecho que su cadena contiene caracteres Unicode que no pueden representarse mediante bytes individuales, y su manejo de caracteres (que se supone que este es el caso) tiene errores.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top