Estoy desarrollando una aplicación web simple usando java/jsp/tomcat/mysql, y el mayor problema radica en la codificación de caracteres porque necesito lidiar con la codificación UTF-8 en lugar del 8851 predeterminadoproblema de codificación java tomcat utf-8
En primer lugar, me gustaría describir la estructura de mi programa. Estoy usando un servlet llamado Controller.java para manejar todas las solicitudes. Entonces, en web.xml, tengo un servlet de controlador que toma todas las solicitudes de * .do.
Luego, este controlador enviará la solicitud en función de la URL solicitada, por ejemplo, si el cliente solicita register.do, Controller enviará la solicitud a Register.java.
Y en el Register.java, hay un método que toma como parámetro de la solicitud, a saber:
public String perform(HttpServletRequest request) {
do something with the request...
}
Así que el problema es que si quiero imprimir algo en UTF-8 dentro de este método, dará caracteres aleatorios. Por ejemplo, tengo un Enum que almacena varias constantes, una de las propiedades que Enum tiene es su nombre en chino tradicional. Si lo imprimo en
public static void main(Stirng[] args{
System.out.println(MyEnum.One.getChn());
logger.info(MyEnum.One.getChn());
}
Esto está impreso correctamente en chino. Sin embargo, si pongo el código exacto dentro del método de tratar con HttpServletRequest:
public String perform(HttpServletRequest request) {
System.out.println(MyEnum.One.getChn());
logger.info(MyEnum.One.getChn());
}
Ellos se imprimen como caracteres aleatorios, pero se pueden ver desde la ventana de depuración (eclipse) que las variables son la celebración de los caracteres chinos correctos.
Entonces, la misma situación ocurre cuando quiero almacenar el valor de request.getParameter(). En la ventana de depuración, puedo ver que la variable contiene los caracteres correctos, pero una la imprimo o intento almacenarla en la base de datos, son caracteres aleatorios.
No sé por qué el comportamiento actúa así, y esto me impide leer los valores de formulario enviados y almacenarlos en la base de datos. ¿Podría alguien dar algunas pistas sobre esto?
Gracias.
No puedo entender si usted está preocupado acerca de la salida corrompido en la consola y los registros del servidor, * o * Salida corrompido en el respuesta resultante al navegador. ¿Puedes aclarar? – erickson
¿Cuál es el valor de 'System.getProperty (" file.encoding ")'? – erickson
Lo que me preocupa es que en la ventana de depuración puedo ver la codificación correcta, pero cuando paso la variable a mi objeto de acceso a la base de datos y la almacena en el archivo db, se convierten en caracteres aleatorios. Entonces, encontré que en el método de tratar con solicitudes, incluso simplemente imprimir UTF-8, el valor de Enum no funciona. –