Personaggi speciali e stringa Java
-
12-12-2019 - |
Domanda
Ho una stringa di testo (stringa Java) che dovrebbe contenere 'gerald.o'leary'
.
In realtà contiene un carattere di controllo oltre al resto, 'c2'.Ho incluso la discarica esagonale, vedere image1.png
per una discarica esagonale.
Quando lo salvo sul DB e leggo indietro eseguendo SQL in un client e copia incollando in un editor esagonale Vedo C2 sostituito da 3F, vedere image2.png
.
Avrei potuto vissuto con esso ma per il fatto quando queste due stringhe sono confrontate in Java utilizzando String.equals (), il falso viene restituito.
Qualcuno può spiegare cosa sta succedendo qui ?!
Soluzione
Hai controllato se il tuo DB SQL può memorizzare caratteri UTF-8 / Unicode (I.e. Non è ISO-8859-1, ASCII o simile)?
- .
- Uscita prima la stringa all'output standard per vedere se è veramente contenente il personaggio giusto (? è fine in uscita, ma ?? o 0xc2 0x92= â'non lo è).
- Quindi controlla il set di caratteri del database.Vedi il suo manuale.
Altri suggerimenti
Non so come hai la discarica esagonale, ma le stringhe Java sono stringhe Unicode, quindi non c'è una corrispondenza 1: 1 tra personaggi e byte.Sospetto che la tua stringa contiene caratteri Unicode che non possono essere rappresentati da singoli byte e la gestione dei caratteri (che presuppone che questo sia il caso) è buggy.