jsp 페이지 전달 중국어 매개 변수 난 장 판 해결
7135 단어 문제
(1)get 제출
1.우선 클 라 이언 트(브 라 우 저)의 form 폼 을 get 방법 으로 어떻게 데 이 터 를 인 코딩 해서 서버 에 제출 하 는 지 알려 주세요.
get 방법 에 있어 서 모두 데 이 터 를 요청 한 url 뒤에 연결 하여 매개 변수 로 합 니 다.예 를 들 어:http://localhost:8080/servlet?msg=abc
(흔히 볼 수 있 는 어 지 러 운 문제 가 발생 합 니 다.url 에 중국어 나 다른 특수 문자 가 나타 나 면:http://localhost:8080/servlet?msg=항 저 우,서버 쪽 에서 쉽게 어 지 러 운 코드 를 얻 을 수 있 습 니 다)url 연결 이 완료 되면 브 라 우 저 는 url 에 대해 URL encode 를 한 다음 서버 에 보 냅 니 다.URL encode 의 과정 은 일부 url 을 문자 로 하 는 것 입 니 다.어떤 인 코딩 방식(예 를 들 어 utf-8,gbk 등)에 따라 바 이 너 리 바이트 로 인 코딩 한 다음 에 각 바이트 마다 3 자 를 포함 하 는 문자열 인'%x y'로 표시 합 니 다.그 중에서 xy 는 이 바이트 의 두 16 진법 으로 표시 합 니 다.제 가 여기 서 말 한 것 은 잘 모 르 겠 지만 구체 적 인 소 개 는 자바.net.URLEncoder 류 의 소 개 를 볼 수 있 습 니 다.URL encode 의 과정 을 알 게 되 었 습 니 다.우 리 는 두 가지 중요 한 문 제 를 볼 수 있 습 니 다.첫째,URL encode 가 필요 한 문 자 는 보통 ASCII 가 아 닌 문자(개괄적 으로 말 하면)입 니 다.그리고 쉽게 말 하면 영문 자 모 를 제외 한 문자(예 를 들 어 중국어,일본어 등)는 URL encode 를 해 야 하기 때문에 우리 에 게 는...모두 영문 자모의 url 은 서버 가 난 장 판 을 받 는 문제 가 발생 하지 않 습 니 다.난 장 판 은 모두 url 에 중국어 나 특수 문자 가 들 어 있어 서 생 긴 것 입 니 다.
두 번 째:URL encode 는 도대체 그런 인 코딩 방식 으로 문 자 를 인 코딩 합 니까?여기 가 바로 브 라 우 저의 일 입 니 다.그리고 브 라 우 저 마다 다른 방법 이 있 습 니 다.중국어 버 전의 브 라 우 저 는 기본적으로 GBK 를 사용 합 니 다.브 라 우 저 설정 을 통 해 UTF-8 을 사용 할 수 있 습 니 다.사용자 마다 브 라 우 저 설정 이 다 를 수 있 고 서로 다른 인 코딩 방식 을 만 들 수 있 습 니 다.그래서 많은 사이트 의 방법 은 먼저 url 안의 중국어 나 특수 문 자 를 자바 script 으로 URL encode 를 한 다음 에 url 을 연결 하여 데 이 터 를 제출 하 는 것 이다.즉,브 라 우 저 를 대신 하여 URL encode 를 만 든 것 이다.장점 은 사이트 가 get 방법 으로 데 이 터 를 제출 하 는 인 코딩 방식 을 통일 할 수 있다 는 것 이다.
URL encode 가 완료 되면 현재 url 은 ASCII 범위 내 문자 가 되 고 iso-8859-1 인 코딩 방식 으로 바 이 너 리 로 바 뀌 어 요청 헤더 와 함께 보 냅 니 다.
여기 서 몇 마디 더 하고 싶 은 것 은 get 방법 에 있어 서 요청 실체 가 없고 데 이 터 를 포함 한 url 이 모두 요청 헤더 에 있 습 니 다.URL encode 를 사용 하 는 이 유 는 개인 적 으로 요청 헤더 에 있어 서 최종 적 으로 iso-8859-1 인 코딩 방식 으로 바 이 너 리 101010 인 코딩 을 해 야 하기 때 문 이 라 고 생각 합 니 다.중국어 등 특수 문 자 를 iso-8859-1 인 코딩 으로 직접 만 들 면 정 보 를 잃 어 버 릴 수 있 으 므 로 URL encode 를 먼저 만 드 는 것 이 필요 합 니 다. 2。서버 쪽(tomcat)은 어떻게 데 이 터 를 디 코딩 으로 가 져 옵 니까?
첫 번 째 단 계 는 먼저 데 이 터 를 iso-8859-1 로 디 코딩 하 는 것 입 니 다.get 방법 에 있어 tomcat 에서 데 이 터 를 얻 는 것 은 ASCII 범위 내의 요청 헤더 문자 입 니 다.그 중의 요청 url 에는 매개 변수 데이터 가 있 습 니 다.만약 에 매개 변수 에 중국어 등 특수 문자 가 있다 면 현재 URL encode 후의%XY 상태 입 니 다.먼저 멈 추고 개발 자 들 이 일반적으로 데 이 터 를 얻 는 과정 을 말씀 드 리 겠 습 니 다.
보통 request.getParameter("name")에서 매개 변수 데 이 터 를 가 져 옵 니 다.저 희 는 request 대상 이나 얻 은 데 이 터 는 디 코딩 을 거 쳤 고 디 코딩 과정 에서 프로그램 에서 지정 할 수 없습니다.여기 서 말하자면 request.set CharacterEncoding("문자 집합")으로 디 코딩 방식 을 지정 할 수 있다 는 초보 자 들 이 많 습 니 다.사실은 안 됩 니 다.servlet 의 공식 API 설명 을 보면 이 방법 에 대한 설명 이 있 습 니 다.Overrides the name of the character encoding used in the body of this request.This method must be called prior to reading request parameters or reading input using getReader().get 방법 에 대해 서 는 어 쩔 수 없 음 을 알 수 있 습 니 다.그렇다면 도대체 어떤 인 코딩 방식 으로 데 이 터 를 디 코딩 하 는 것 입 니까?이것 은 tomcat 의 일 입 니 다.기본 적 으로 부족 한 것 은 iso-8859-1 입 니 다.그러면 우 리 는 왜 get 요청 에 중국어 파 라 메 터 를 가지 고 서버 에서 왜 어 지 러 운 코드 를 받 았 는 지 찾 을 수 있 습 니 다.이 유 는 클 라 이언 트 가 보통 UTF-8 또는 GBK 로 데이터 URL encode 를 사용 하기 때 문 입 니 다.여 기 는 iso-8859-1 방식 으로 URL decoder 가 분명히 안 됩 니 다.프로그램 에서 저희 가 직접...
Java
new String(request.getParameter("name").getBytes("iso-8859-1")," URL encode ")
new String(request.getParameter("name").getBytes("iso-8859-1")," URL encode ")
바이트 코드 를 복원 한 다음 에 정확 한 방식 으로 데 이 터 를 디 코딩 합 니 다.인터넷 의 글 은 보통 tomcat 에서 설정 합 니 다.
본인 의 해결 방법:js 에서 인 자 를 인 코딩 합 니 다.
function goToPage(cusCode,currentYear,currentMonth,cusName){
var url= "checkCityInvUpload.do?method=checkCityInvUploadDetail&cusCode=" + cusCode;
<span> </span>var location = encodeURI(url);//js
<span> </span>window.open(location);
}
:
java.net.URLEncoder.encode(keywords)
1.JSP 와 페이지 매개 변수 사이 의 난 코드
JSP 가 페이지 파 라 메 터 를 가 져 올 때 시스템 의 기본 인 코딩 방식 을 사용 합 니 다.페이지 파라미터 의 인 코딩 형식 과 시스템 의 기본 인 코딩 형식 이 일치 하지 않 으 면 오류 가 발생 할 수 있 습 니 다.
이러한 난 코드 문 제 를 해결 하 는 기본 적 인 방법 은 페이지 에서 파 라 메 터 를 가 져 오기 전에 강제로 지정 하 는 것 이다.
request :request.setCharacterEncoding("GBK") request.setCharacterEncoding("gb2312")。
servlet 이 JSP 에서 변 수 를 페이지 로 출력 할 때 오류 가 발생 하면,
response.setContentType("text/html;charset=GBK") response.setContentType("text/html;charset=gb2312") 。
2.데이터 베 이 스 를 어 지 럽 히 는 이런 어 지 러 운 코드 는 데이터 베 이 스 를 삽입 한 중국 어 를 어 지 럽 히 거나 디 스 플레이 를 읽 을 때 도 어 지 럽 습 니 다.해결 방법 은 다음 과 같 습 니 다.
String Url="jdbc:mysql://localhost/digitgulf?user=root&password=root&useUnicode=true&characterEncoding=GB2312";
:
response.setContentType("text/html;charset=gb2312");
request.setCharacterEncoding("gb2312");
3.중국 어 를 매개 변수 로 하여 어 지 러 운 코드 를 전달 할 때 우리 가 중국어 문 자 를 매개 변수 로 다른 페이지 를 전달 할 때 도 어 지 러 운 상황 이 발생 할 수 있 습 니 다.해결 방법 은 다음 과 같 습 니 다.
,
RearshRes.jsp?keywords=" + java.net.URLEncoder.encode(keywords)
keywords=new String(request.getParameter("keywords").getBytes("8859_1"));
4.JSP 중국어 난 장 판 문제 의 4:Get 방식 폼 전달 과 URI 방식 전달 매개 변수 난 장 판,tomcat 에 인 코딩 설정
해결 방안
apache-tomcat-6.0.18\conf\server.xml
< Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="GBK" />
5.b.jsp 에서 String name=request.getParameter("name");으로 변경
String name=new String(request.getParameter("name").getBytes("ISO-8859-1"),"GB2312");
6.JSP 중국어 코드 문제 의 더 좋 은 해결 방법 은 필터 기술 을 사용 하 는 것 이다.
Encoding
package com.htt;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain; import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class Encoding implements Filter {
public void destroy() { }
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("GBK");
chain.doFilter(request, response);
}
public void init(FilterConfig filterConfig) throws ServletException { }
}
Web.xml
< filter>
< filter-name>encoding< /filter-name>
< filter-class>com.htt.Encoding< /filter-class>
< /filter>
< filter-mapping>
< filter-name>encoding< /filter-name>
< url-pattern>/ToCh_zn< /url-pattern>
< /filter-mapping>
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
카카오 - 신고 결과 받기문제소개 입출력 예시 코드 리팩토링 정의된 변수 확인...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.