2012-10-15 17 views
9

Ho un problema di charset con stringa letterale in Java.Stringa letterale Java: set di caratteri errato in fase di esecuzione

Come si può vedere dall'immagine qui sotto, ho un oggetto statico chiamato TITULO con un parametro costante di stringa letterale "Título". Quando eseguo il programma, questa stringa viene letta come "TÃ-tulo". Non so perché.

Eclipse Debug View

esploro le impostazioni charset con impostazioni Eclipse progetto Proprietà finestra e Tomcat, ma tutti loro sono con UTF-8 come opzione.

Sono in esecuzione Tomcat 7, Eclipse Helios e Windows SO.

Qualcuno può aiutarmi con questo problema?

+0

Sembra che la console sia impostata su un'altra codifica, cp1252 o latin1. –

+0

Sostituisci "this.id = id" con "this.id = TITULO". Ora questo.id ha 7 caratteri o 6. –

+0

@DanielFischer Non necessariamente la console, ma forse Eclipse in generale sta usando il set di caratteri sbagliato? Cosa succede se lasci che la JVM determini le dimensioni della stringa? Do 'int len ​​= id.length();' e vediamo qual è il valore di 'len' nel debugger. Potrebbe essere una mancata corrispondenza della codifica JVM. Queste informazioni vengono trasferite su un socket durante il debug, quindi forse Eclipse sta cercando di determinarlo utilizzando una codifica diversa da Tomcat? A parte questo, non ne ho idea. : 3 – Brian

risposta

1

Il codice che è in editor di Eclipse non è lo stesso del codice che Tomcat è in esecuzione.

Ho trovato un file .war nella cartella/target. Ho cancellato questo file di guerra e funziona! Il tomcat stava eseguendo le lezioni da questo vecchio file di guerra.

Ho recentemente convertito questo progetto Eclipse in esecuzione in un progetto Maven. Potrei aver eseguito 'pacchetto mvn' in questo processo che ha creato questo file di guerra.

Grazie a tutti per l'aiuto, ho trovato questa soluzione.

0

Credo che la stringa che stai cercando (this.id) at non sia in realtà la stringa costante statica Titulo.

Da qualche parte nel codice, si sta leggendo l'unicode String Titulo, convertendolo in un array di byte, quindi convertendolo in String e passandolo al costruttore di Style. La stringa si corrompe durante la conversione. Non posso dire altro a meno che non mostri la traccia dello stack del codice in cui chiami il costruttore di Style.

+0

sì. Dopo aver modificato il mio codice per testare il suggerimento @Brian, ora so che il mio codice sull'editor non è il codice in esecuzione. Sto cercando questo codice errato. –

1

Si potrebbe provare a impostare il Tomcat URIEncoding a UTF-8 nel server.xml

<Connector port="8090" URIEncoding="UTF-8"/> 
+0

L'ho provato. Ma non funziona. Nuove informazioni: ho cambiato il mio progetto eclipse in un progetto maven. Ho eseguito 'mvn eclipse: clean eclipse: eclipse' e ​​ho ricaricato il progetto in eclissi. Dopo questo ho pulito il progetto Eclipse e Tomcat Work Directory. Elimina la directory vecchia/bin dalla cartella del progetto. Ora, mi rendo conto che Tomcat sta eseguendo un vecchio codice. Ho bisogno di scoprire dove sono questo codice ... –

+0

Normalmente, Eclipse distribuisce il codice a Tomcat qui: .metadata \ .plugins \ org.eclipse.wst.server.core \ tmp0 – Zagrev

Problemi correlati