2013-09-04 2 views
1

Hello fellow Stackoverflowers.GET 요청 매개 변수의 문자 인코딩

우리는 자바/스프링 MVC 응용 프로그램에 스마트 폰 응용 프로그램에서의 HTTP GET 웹 서비스 호출을하고 있습니다 :

나는 내가 몇 가지 도움을 필요로하는 문제가있다. 우리는 mod_proxy 프록시 설정을 사용하는 Apache 서버가있는 Tomcat 응용 프로그램 서버에 있습니다.

URL에 묻혀있는 매개 변수 중 하나는 "Männen"이라는 단어로, 매개 변수 중 하나 인 조직 이름입니다. 이 응용 프로그램은 Jquery Ajax GET 요청을 만들고 매개 변수는 "M % E4nnen"으로 응용 프로그램을 떠납니다. 이는 "ä"가 올바르게 URL 인코딩되었음을 의미합니다. Spring 컨트롤러에 도착하면 "Mnnen"으로 왜곡되었습니다.

나는 이것들에 대해 꽤 많은 스레드를 발견했으며 모든 커넥터에 URIEncoding = "UTF-8"을 추가하여 Tomcat server.xml 파일을 수정하는 것이 좋습니다. 물론, 나는 이것을 시도했다. 그것은 변화를 만들었지 만 문제를 해결하지는 못했습니다. 문자열은 이제 "Mnnnen"으로 전달됩니다. Apache 프록시 구성의 ProxyPass 매개 변수에 "nocanon"을 추가하라는 내용의 스레드도있었습니다. 이 시도했지만 아무런 차이가 없습니다. , 내가 요청에 따라 할 수있는 로그를 사용

:

  1. 아파치 액세스 로그에서이 매개 변수가 "M %의 E4nnen"
  2. 아파치 프록시 로그에서로 기록되고, 매개 변수는 다음과 같이 기록됩니다 "M % E4nnen"
  3. 톰캣 localhost_access 로그에서이 매개 변수는 "M %의 E4nnen"요청을 수신 스프링 컨트롤러
  4. 로 기록되고, 상기 파라미터는
"M�nnen"로 기록 될

My Spring 애플리케이션에도 문자 인코딩 필터가 있지만 이해하는 한 요청 본문에서만 작동합니다.

<filter> 
    <filter-name>CharacterEncodingFilter</filter-name> 
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 
    <init-param> 
     <param-name>encoding</param-name> 
     <param-value>UTF-8</param-value> 
    </init-param> 
     <init-param> 
     <param-name>forceEncoding</param-name> 
     <param-value>true</param-value> 
     </init-param> 
</filter> 
<filter-mapping> 
    <filter-name>CharacterEncodingFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

정말 다른 무엇을 시도하거나 다른 어디에서 볼 모르는 : 아래 그림과 같이 그것은 구성되어 있습니다. 누구든지 올바른 방향으로 나를 안내 할 수 있다면, 매우 높이 평가 될 것입니다.

답변

0

HTML이 Windows-1252 (또는 "하위 집합"ISO-8859-1)에 있으면 % E4는 괜찮습니다. 그러나 HTML이 유니 코드 인 경우 UTF-8이 아닌 경우 HTML 페이지 가진 캐릭터 셋 UTF-8 게다가

String auml = "\u00e4"; 
String aumlPerc = URLEncoder(auml, "UTF-8"); 
URLDecoder.decode(aumlPerc, "UTF-8"); 

, 당신은 <form accept-charset="UTF-8" ...>을 가질 수 있습니다.

페이지가 실수로 % E4를 보내고 ISO-8859-1 (기본값)으로 받아 들여 멀티 바이트 UTF-8 시퀀스로 변환되었지만 ISO-8859-1로 잘못 간주됩니다. .

request.setEncoding과 같이 인코딩을 설정하는 나사가 있지만 제한된 정보로 볼 위치를 말할 수 없습니다. 어쩌면이 정보로 충분할 것입니다.

+0

입력 해 주셔서 감사합니다. 내가 분명히하자. 이것은 RESTful 웹 서비스입니다. 관련된 HTML이 없습니다. 서비스는 GET 요청 (요청 매개 변수가 포함 된 URL)을 보내고 서비스에서 처리하고 XML 구조로 반환합니다. –

+0

그런 다음 init 매개 변수'encoding'은 HTTP 기본값 인'ISO-8859-1'이어야합니다. –

+0

Tomcat 또는 Apache의 초기화 매개 변수는 무엇입니까?모든 UTF-8 프로세스를 달성하려고 할 때 ISO-8859-1을 사용하는 것이 이상하게 들립니다. –

관련 문제