Red de conocimiento del abogados - Respuesta jurídica de la empresa - La página jSP contiene caracteres confusos.

La página jSP contiene caracteres confusos.

1. El origen del problema chino de Java

El kernel y los archivos de clase de Java se basan en Unicode, lo que hace que los programas Java sean buenos para varias plataformas, pero también trae algunos problemas chinos confusos. personajes. Hay dos razones principales: el problema del código confuso causado por la compilación de los propios archivos Java y JSP y el problema del código confuso causado por la interacción de los programas Java con otros medios.

En primer lugar, es probable que los archivos fuente Java (incluido JSP) contengan chino, y el método de guardado de los archivos fuente Java y JSP se basa en flujos de bytes. Si Java y JSP se compilan en archivos de clase, utilizar Si el método de codificación no coincide con la codificación del archivo fuente, aparecerán caracteres confusos. En base a este tipo de código confuso, se recomienda no escribir chino en archivos Java (la parte del comentario no participa en la compilación, no importa si escribe chino, si debe escribir, intente compilar manualmente con el parámetro). -ecoding GBK o -ecoding gb2312 para JSP, en el encabezado del archivo Agregar o básicamente puede resolver este tipo de problema de código confuso.

Enviar datos desde el formulario de la página al programa java byte-gt; char

Desde el programa java a la página display char-gt

Desde el formulario de la página. la base de datos al byte del programa java—gt; char

Desde el programa java hasta el byte de la base de datos

Desde el archivo hasta el byte del programa java—gt>

Del programa java al archivo char-gt;byte

Del flujo al programa java byte-gt;char

Del programa java al flujo char-gt;byte

Si lo anterior El método de codificación utilizado en el proceso de conversión no es consistente con la codificación original de los bytes y es probable que aparezcan caracteres confusos.

2. Solución

Como se mencionó anteriormente, el proceso de conversión de caracteres y bytes cuando los programas Java interactúan con otros medios, si estos procesos de conversión son propensos a caracteres confusos. La clave para resolver estos problemas de código confuso es garantizar que el método de codificación utilizado durante la conversión sea coherente con el método de codificación original de los bytes, que se analizan por separado a continuación (consulte la primera parte para conocer los códigos confusos generados por Java o JSP). ).

1. Caracteres confusos entre JSP y los parámetros de la página

JSP generalmente utiliza el método de codificación predeterminado del sistema al obtener los parámetros de la página si el tipo de codificación de los parámetros de la página no coincide con la codificación predeterminada del sistema. type , es probable que aparezcan caracteres confusos. El método básico para resolver este tipo de problema de código confuso es especificar por la fuerza el método de codificación de la solicitud para obtener parámetros antes de que la página los obtenga: request.setCharacterEncoding ("GBK") o request.setCharacterEncoding ("gb2312").

Si aparecen caracteres confusos cuando JSP envía variables a la página, puede configurar Response.setContentType ("text/html; charset=GBK") o Response.setContentType("text/html; charset= gb2312 " )resolver.

Si no desea escribir estas dos frases en cada archivo, una forma más sencilla es utilizar el filtro en la especificación del Servlet para especificar la codificación típica y el código principal del filtro en la web. .xml Como sigue:

web.xml:

CharacterEncodingFilter

net.vschool.web.CharacterEncodingFilter

codificación

GBK

CharacterEncodingFilter

/*

CharacterEncodingFilter.java:

la clase pública CharacterEncodingFilter implementa el filtro

{

codificación de cadena protegida = null

public void init(FilterConfig filterConfig) lanza ServletException

{

this.encoding = filterConfig.getInitParameter ("codificación");

}

public void doFilter (solicitud ServletRequest, respuesta ServletResponse, cadena FilterChain) lanza IOException, ServletException

{

request.setCharacterEncoding(codificación);

response.setContentType("text/html; charset=" codificación);

chain.doFilter(solicitud, respuesta)

p>

}

}