JSP debe "codificarse" dos veces. La primera etapa usará pageEncoding, la segunda etapa usará utf-8 a utf-8 y la tercera etapa es la página web producida por Tomcat, usando contentType.
Con respecto a la diferencia entre los atributos pageEncoding y contentType en páginas JSP:
pageEncoding es la codificación del propio archivo jsp
El juego de caracteres de contentType se refiere a la codificación del contenido cuando el servidor lo envía al cliente.
JSP debe "codificarse" dos veces. La primera etapa usará pageEncoding, la segunda etapa usará utf-8 a utf-8 y la tercera etapa es la página web producida por Tomcat, usando contentType.
La primera etapa es compilar jsp en .java. Leerá jsp de acuerdo con la configuración de pageEncoding. El resultado es que el esquema de codificación especificado se traduce a un código fuente JAVA UTF-8 unificado (es decir, .java). La configuración es incorrecta o no hay configuración y lo que sale son caracteres chinos confusos.
La segunda etapa es la compilación del código fuente JAVA de JAVAC a byteCode de Java. No importa qué esquema de codificación se utilice al escribir JSP, los resultados de esta etapa son todos códigos fuente de Java codificados en UTF-8.
JAVAC utiliza la codificación UTF-8 para leer el código fuente de Java y compilarlo en código binario con codificación UTF-8 (es decir, .class. Esta es la especificación de JVM para la expresión de cadenas constantes en código binario (codificación Java).
La tercera etapa es que Tomcat (o su contenedor de aplicaciones) carga y ejecuta el código binario JAVA de la etapa dos. El resultado de salida es lo que se ve en el cliente. En este momento, el parámetro contentType oculto en las etapas uno y dos funciona.
configuración de tipo de contenido.
Los valores predeterminados para pageEncoding y contentType son ISO8859-1. Si configura uno de ellos de manera casual, el otro será el mismo (este es el caso de TOMCAT4.1.27). Pero esto no es absoluto, depende del método de procesamiento. cada JSPC pageEncoding no es igual a contentType, lo que es más propicio para el desarrollo y visualización de páginas web JSP de texto CJKV en Asia (por ejemplo, pageEncoding = GB2312 no es igual a contentType = utf-8).
El archivo jsp no es como .java. Cuando el compilador lee .java, el valor predeterminado es la codificación correspondiente a la configuración regional establecida por el sistema operativo. Generalmente, ya sea que escribamos código en el Bloc de notas o en ue, si no hay una transcodificación especial, lo que se escribe será el contenido en el formato de codificación local. Por lo tanto, el método adoptado por el compilador puede permitir que la máquina virtual obtenga los datos correctos.
Pero este no es el caso de los archivos jsp. No tiene este proceso de transcodificación predeterminado, pero se puede lograr una transcodificación correcta especificando pageEncoding.
Por ejemplo:
<%@ página contentType="text/html;charset=utf-8" %>
La mayoría de ellos imprimen caracteres confusos, porque el "¿Cómo estás?" que ingresé es de gbk, pero no se sabe si el servidor capturó correctamente "Cómo estás".
Simplemente cámbielo al siguiente contenido.
<%@ página contentType="text/html;charset=utf-8" pageEncoding="GBK"%>