|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Nov 2002
Messaggi: 163
|
[java]Conversione stringa in UTF-8
Ciao a tutti!
sto cercando di codificare una stringa con il charset UTF-8 (la stringa è un parametro che mi arriva da una pagina jsp). Fino ad ora ho provato questi tre modi: 1) Codice:
String stringNew = new String(oldString.getByte(), "UTF-8"); 2) Codice:
request.setCharacterEncoding("UTF-8"); 3) Codice:
Charset cs = Charset.forName("UTF-8"); CharsetDecoder decoder = cs.newDecoder(); ByteBuffer bbUser = ByteBuffer.allocate(username.getBytes().length); bbUser.put(username.getBytes()); try { bbUser.rewind(); cbUser = decoder.decode(bbUser); } catch (CharacterCodingException e1) { e1.printStackTrace(); } Sembra quindi che la codifca della stringa non abbia lo stesso comportamento da ambiente windows a linux... Qualcuno sa cortesemente in cosa consiste questa differenza oppure sa indicarmi un metodo alternativo da provare? Ringrazio tutti anticipatamente! |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Una stringa contiene caratteri Unicode (UTF-16 per la precisione). Quindi è abbastanza inutile da una stringa ottenere i byte (in qualunque charset) e poi ricreare una nuova stringa da quei byte.
Quindi fare: String stringNew = new String(oldString.getByte(), "UTF-8"); serve a poco e potrebbe anche non funzionare visto che il getBytes() senza argomenti usa il charset di default della piattaforma, che quindi non è affatto detto che sia UTF-8. Spiega meglio cosa devi fare.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
![]() |
![]() |
![]() |
#3 | |
Member
Iscritto dal: Nov 2002
Messaggi: 163
|
Quote:
io ho una username del tipo: cøciao Nel realm utilizzato per effettuare l'autenticazione questa username non viene codificata nella maniera corretta (ossia UTF-8), e viene interpretata in questo modo: cøciao e quindi l'autenticazione non va a buon fine. Il mio probelma è riuscire a codificare in maniera corretta questo username in modo da permettere che l'autenticazione vada a buon fine (quindi riuscire a codificare in utf-8 la stringa contenente lo username...) |
|
![]() |
![]() |
![]() |
#4 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Cioè ho capito la questione: ø è la sequenza (in hex C3 B8) che codifica in UTF-8 il carattere ø (in Unicode U+00F8). E fin qui nulla di strano. Vorrei capire meglio cosa devi leggere e/o scrivere e come.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
![]() |
![]() |
![]() |
#5 | |
Member
Iscritto dal: Nov 2002
Messaggi: 163
|
Quote:
ho una form per l'autenticazione in una pagina jsp, nel campo username metto: cøciao quando faccio il submit viene invocata la action j_security_check ed entra in gioco il JDBCRealm per effettuare l'autenticazione. Il problema è che nel realm, lo username viene ovviamente recuperato come parametro dalla request e memorizzato all'interno di una stringa che codifica il parametro in questo modo: cøciao piuttosto che cøciao. Io devo fare in modo che il parametro recuperato dalla request (ossia lo username) venga codificato in modo corretto, cioè così: cøciao Aggiungo inoltre che per tutte le altre componenti in gioco (dalle pagine jsp al DBMS) come charset di riferimento è impostato UTF-8, e infatti non ci sono problemi tranne nella fase di autenticazione, dove appunto entra in gioco il realm che sto cercando di modificare. |
|
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
![]() Probabilmente devi configurare o dichiarare il charset da qualche parte ... ma non ti so dire di più. ![]()
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 18:46.