Question

J'ai une chaîne de texte (Java String) qui doit contenir 'gerald.o'leary'.

Dans la réalité, il contient un caractère de contrôle en plus du reste, 'c2'.J'ai inclus le vidage hexadécimal, veuillez consulter image1.png pour un vidage hexadécimal.

enter image description here

Quand je l'enregistrer dans la bd et le lire en exécutant SQL dans un client et le copier-coller dans un éditeur hexadécimal, je vois c2 remplacé par 3f, veuillez consulter image2.png.

enter image description here

Je pouvais vivre avec elle, mais pour le fait que lors de ces deux chaînes sont comparées en Java à l'aide de la Chaîne.equals(), false est retourné.

Quelqu'un peut-il expliquer ce qui se passe ici?!

Était-ce utile?

La solution

Avez-vous vérifier si votre SQL DB pouvez stocker UTF-8/Unicode des caractères (c'est à direce n'est pas ISO-8859-1, ASCII ou similaire)?

  • Première sortie de la Chaîne de caractères sur la sortie standard pour voir si c'est vraiment contenant le bon caractère (?est bien dans la production, mais qui ??ou 0xC2 0x92 = Â ne l'est pas).
  • Ensuite, vérifiez votre jeu de caractères de la base de données.Reportez vous à son manuel.

Autres conseils

Je ne sais pas comment vous avez eu le vidage hexadécimal, mais java, les chaînes sont des chaînes unicode, donc il n'y a pas de correspondance 1:1 entre les personnages et les octets.Je soupçonne votre chaîne contient des caractères unicode qui ne peut pas être représenté par un octet, et votre personnage de manutention (ce qui suppose que c'est le cas) est buggé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top