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.

Inserire l'immagine Descrizione qui

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.

Inserisci Descrizione dell'immagine qui

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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top