Sto sviluppando una semplice applicazione web usando java/jsp/tomcat/mysql, e il maggior problema si trova nella codifica dei caratteri perché ho bisogno di gestire la codifica UTF-8 invece dell'8851 di defaultjava tomcat utf-8 problema di codifica
Prima di tutto vorrei descrivere la struttura del mio programma. Sto usando un servlet chiamato Controller.java per gestire tutte le richieste. Quindi in web.xml, ho un servlet Controller che accetta tutte le richieste da * .do.
Quindi questo controller invierà la richiesta in base all'URL richiesto, ad esempio, se il client richiede Register.do, il controllore invierà la richiesta a Register.java.
E nel Register.java, c'è un metodo che prende la richiesta come parametro, e cioè:
public String perform(HttpServletRequest request) {
do something with the request...
}
Quindi il problema è se voglio stampare qualcosa in UTF-8 all'interno di questo metodo, darà caratteri casuali. Ad esempio, ho un Enum che memorizza diverse costanti, una delle proprietà di Enum è il suo nome in cinese tradizionale. Se lo stampo in
public static void main(Stirng[] args{
System.out.println(MyEnum.One.getChn());
logger.info(MyEnum.One.getChn());
}
Questo è stampato correttamente in cinese. Tuttavia, se metto il codice esatto all'interno del metodo che fare con HttpServletRequest:
public String perform(HttpServletRequest request) {
System.out.println(MyEnum.One.getChn());
logger.info(MyEnum.One.getChn());
}
Sono stampati in caratteri casuali, ma posso vedere dalla finestra di debug (Eclipse) che le variabili sono in possesso di caratteri cinesi corretti.
Quindi, la stessa situazione si verifica quando voglio memorizzare il valore da request.getParameter(). Nella finestra di debug, posso vedere la variabile contiene caratteri corretti, ma uno stampo o cerco di memorizzarlo nel database, sono caratteri casuali.
Non so perché il comportamento si comporta in questo modo e questo mi impedisce di leggere i valori dei moduli inviati e di memorizzarli nel database. Qualcuno potrebbe dare qualche suggerimento su questo?
Grazie mille.
Non riesco a capire se siete preoccupati di uscita corrotti su console e tronchi del server, * o * uscita corrotto nel risultante risposta al browser. Puoi chiarire? – erickson
Qual è il valore di 'System.getProperty (" file.encoding ")'? – erickson
Quello che mi preoccupa è che nella finestra di debug posso vedere la codifica corretta, ma quando passo la variabile al mio oggetto di accesso al database e la memorizzo nel db, diventeranno caratteri casuali. Quindi ho scoperto che nel metodo di gestione delle richieste, anche semplicemente stampare il valore di Enum UTF-8 non funziona. –