JSP precisa ser "codificado" duas vezes. O primeiro estágio usará pageEncoding, o segundo estágio usará utf-8 a utf-8 e o terceiro estágio será a página web produzida pelo Tomcat, usando contentType.
Em relação à diferença entre os atributos pageEncoding e contentType nas páginas JSP:
pageEncoding é a codificação do próprio arquivo jsp
O conjunto de caracteres de contentType refere-se à codificação do conteúdo quando o servidor o envia ao cliente.
JSP precisa ser "codificado" duas vezes. O primeiro estágio usará pageEncoding, o segundo estágio usará utf-8 a utf-8 e o terceiro estágio será a página web produzida pelo Tomcat, usando contentType.
O primeiro estágio é compilar jsp em .java. Ele lerá jsp de acordo com a configuração de pageEncoding. O resultado é que o esquema de codificação especificado é traduzido em um código-fonte JAVA UTF-8 unificado (ou seja, .java). a configuração está errada ou não há configuração e o que aparece são caracteres chineses distorcidos.
O segundo estágio é a compilação do código-fonte JAVA do JAVAC para o byteCode java. Independentemente do esquema de codificação usado ao escrever JSP, os resultados deste estágio são todos os códigos-fonte Java codificados em UTF-8.
JAVAC usa codificação UTF-8 para ler o código-fonte java e compilá-lo em código binário de codificação UTF-8 (ou seja, .class). Esta é a especificação da JVM para a expressão de strings constantes em código binário (codificação java).
O terceiro estágio é que o Tomcat (ou seu contêiner de aplicativo) carrega e executa o código binário JAVA do estágio dois. O resultado de saída é o que é visto no cliente. Neste momento, o parâmetro contentType oculto nos estágios um e dois funcionou.
configuração contentType.
Os padrões para pageEncoding e contentType são ISO8859-1. Se você definir um deles casualmente, o outro será o mesmo (este é o caso do TOMCAT4.1.27). cada JSPC. pageEncoding não é igual a contentType, o que é mais propício ao desenvolvimento e exibição de páginas da web JSP de texto CJKV na Ásia (por exemplo, pageEncoding=GB2312 não é igual a contentType=utf-8).
O arquivo jsp não é como .java. Quando .java é lido pelo compilador, o padrão é a codificação correspondente ao local definido pelo sistema operacional. Geralmente, quer escrevamos o código no Bloco de Notas ou no ue, se não houver uma transcodificação especial, o que será escrito será o conteúdo no formato de codificação local. Portanto, o método adotado pelo compilador pode apenas permitir que a máquina virtual obtenha os dados corretos.
Mas este não é o caso dos arquivos jsp. Ele não possui esse processo de transcodificação padrão, mas a transcodificação correta pode ser obtida especificando pageEncoding.
Por exemplo:
<%@ page contentType="text/html;charset=utf-8" %>
A maioria deles imprime caracteres ilegíveis, porque o "Como vai você" que digitei é do gbk, mas não se sabe se o servidor capturou corretamente "Como vai você".
Basta alterá-lo para o seguinte conteúdo
<%@ page contentType="text/html;charset=utf-8" pageEncoding="GBK"%>