JSP는 두 번 "인코딩"되어야 합니다. 첫 번째 단계에서는 pageEncoding을 사용하고 두 번째 단계에서는 utf-8 ~ utf-8을 사용하며 세 번째 단계는 contentType을 사용하여 Tomcat에서 생성된 웹 페이지입니다.
JSP 페이지의 pageEncoding 속성과 contentType 속성의 차이점은 다음과 같습니다.
pageEncoding은 jsp 파일 자체의 인코딩입니다.
contentType의 charset은 서버가 클라이언트에 콘텐츠를 전송할 때 콘텐츠 인코딩을 참조합니다.
JSP는 두 번 "인코딩"되어야 합니다. 첫 번째 단계에서는 pageEncoding을 사용하고 두 번째 단계에서는 utf-8 ~ utf-8을 사용하며 세 번째 단계는 contentType을 사용하여 Tomcat에서 생성된 웹 페이지입니다.
첫 번째 단계는 jsp를 .java로 컴파일하는 것입니다. pageEncoding 설정에 따라 jsp를 읽습니다. 결과적으로 지정된 인코딩 체계가 통합 UTF-8 JAVA 소스 코드(예: .java)로 변환됩니다. 설정이 잘못되었거나 설정이 없어서 한자가 깨져서 나옵니다.
두 번째 단계는 JAVAC의 JAVA 소스 코드를 Java byteCode로 컴파일하는 것입니다. JSP를 작성할 때 어떤 인코딩 방식을 사용하든 이 단계의 결과는 모두 UTF-8로 인코딩된 Java 소스 코드입니다.
JAVAC는 UTF-8 인코딩을 사용하여 Java 소스 코드를 읽고 이를 UTF-8 인코딩 바이너리 코드(예: .class)로 컴파일합니다. 이는 바이너리 코드(Java 인코딩)의 상수 문자열 표현에 대한 JVM 사양입니다.
세 번째 단계는 Tomcat(또는 해당 애플리케이션 컨테이너)이 2단계부터 JAVA 바이너리 코드를 로드하고 실행하는 것입니다. 이때 출력 결과는 1단계와 2단계에 숨겨진 contentType 매개변수가 작동했습니다.
콘텐츠 유형 설정.
pageEncoding과 contentType의 기본값은 모두 ISO8859-1입니다. 둘 중 하나를 임의로 설정하면 다른 하나는 동일합니다(TOMCAT4.1.27의 경우). 그러나 이는 절대적인 것은 아니며 처리 방법에 따라 다릅니다. 각 JSPC pageEncoding은 contentType과 동일하지 않습니다. 이는 아시아에서 CJKV 텍스트 JSP 웹 페이지의 개발 및 표시에 더 도움이 됩니다(예: pageEncoding=GB2312는 contentType=utf-8과 동일하지 않음).
jsp 파일은 .java와 다릅니다. 컴파일러가 .java를 읽을 때 기본적으로 운영 체제에서 설정한 로케일에 해당하는 인코딩이 사용됩니다. 일반적으로 코드를 메모장으로 작성하든 UE에서 작성하든 특별한 트랜스코딩이 없으면 로컬 인코딩 형식의 콘텐츠가 작성됩니다. 따라서 컴파일러가 채택한 방법을 사용하면 가상 머신이 올바른 데이터를 얻을 수 있습니다.
그러나 jsp 파일의 경우에는 그렇지 않습니다. 기본 트랜스코딩 프로세스가 없지만 pageEncoding을 지정하면 올바른 트랜스코딩이 가능합니다.
예를 들어:
<%@ 페이지 contentType="text/html;charset=utf-8" %>
내가 입력한 "잘 지내세요"는 gbk에서 가져온 것이기 때문에 대부분 잘못된 문자를 인쇄하지만 서버가 "잘 지내세요"를 올바르게 캡처했는지 여부는 알 수 없습니다.
다음 내용으로 변경해 보세요.
<%@ 페이지 contentType="text/html;charset=utf-8" pageEncoding="GBK"%>