2013-08-13 5 views
4

게시 요청을 통해 스프링 컨트롤러에 매개 변수를 제출하는 유스 케이스가 있습니다. 컨트롤러에서 매개 변수를 읽고 일부 작업을 수행하고 있습니다. 그런 다음 요청 매개 변수의 일부로 해당 매개 변수를 다른 URL로 보냅니다.중국어 문자 인코딩?

여기서는 중국어 문자를 처리 할 수 ​​없습니다. 그것은 왜곡되고있다.

나는 지금하고있다 : 1) HTML 페이지 (이것은 JSP가 아니다)에서 이름 주제를 가진 param으로서 중국어 텍스트 아래에 전달 중이다. 以下 便是 有关 此 问题 的 所有 信息

2)는 컨트롤러로부터의 요청이 값을 판독하면, 그와 같은오고 : »구매 ¥ ä¸ä¾¿æ¯æå³æ¤é®é ¢ çææä¿¡ æ¯

3) 페이지에서 제출 된 정확한 값을 얻을 수 없습니다. http://coderstoolbox.net/string/#!encoding=none&action=encode&charset=utf_8 http://www.cafewebmaster.com/online_tools/utf_decode

4) 지금은 위해 response.sendRedirect 다른 URL에 대한 실제 사용자가 제출 문자열을 전달하려는 : 내가 URL을 아래에서 인코딩 된 텍스트를 확인할 때 이미 인코딩 같은

는 것 같습니다. 나는 실제 문자열을 얻을 수 있지만 성공하지 못하는지 확인하기 위해 URL 디코딩을 시도했다.

tomcat 서버를 사용하고 있습니다. server.xml에서 UTF-8 인코딩을 정의하고 첫 번째 필터 매핑으로 web.xml에 URLEncodingFilter를 추가했습니다. 이 필터는 UTF-8로 request.setEncoding을 수행합니다.

아직 잘못 된 부분을 추적 할 수 없습니다. 누군가가 컨트롤러에서 실제 문자열을 가져 오는 방법을 제안 할 수 있습니까?

또한

<filter> 
      <filter-name>EncodingFilter</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> 

이 더 많은 컨텍스트를 얻을 수있는 정보가 필요 알려줘 내 web.xml에 필터가 아래에 있습니다.

<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> 

및 매핑 :

+1

필립 샌더의 답변 및 추가 URIEncoding = "UTF-8"service.xml에 커넥터는 모든 것을 필요한해야한다. – hajime

+1

@CMR : OP는 POST 요청과 관련이 있음을 분명히 언급합니다. URIEncoding은 전혀 효과가 없다. – BalusC

답변

2

는이 방법으로 문제가 해결 희망

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" 
    redirectPort="8443" useBodyEncodingForURI="true"> 
</Connector> 

아래로 server.xml 파일에서 커넥터를 변경하십시오.

감사합니다, 키 쇼어

0

web.xml에이 필터를 추가하려고

<filter-mapping> 
    <filter-name>characterEncodingFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

나는 비슷한 문제를 가지고이 그것을 해결했다.

+0

이 필터는 web.xml에 있지만 아직 사용하지 않습니다. – Rajeev

+0

잊어 버린 경우 매핑을 추가했습니다. –

+0

매핑이 있습니다. 나는 그것이 또한 괜찮다고 느낍니다. <필터 매핑> EncodingFilter <서블릿 이름> SpringMVCServlet 요청 FORWARD Rajeev

0

아래에서 디코딩을 한 후에 실제 문자열을 검색 할 수 있습니다. 나는 왜 내가 라틴어 해독을해야하는지 조사 중이다. 문제를 완전히 이해하면 업데이트 할 것입니다. 라틴 인코딩의 이유를 아는 사람이 있으면 알려 주시기 바랍니다. 이 ... 어떤 제안을 라틴어로 인코딩 된 문자열을 얻는 방법

여전히
import java.nio.charset.CharsetDecoder; 
import java.nio.charset.Charset; 
import java.util.Arrays; 

public class Main { 
    public static void main(String[] args) throws Exception { 
     byte[] encoding1 = "以ä¸ä¾¿æ¯æå³æ­¤é®é¢çææä¿¡æ¯".getBytes("ISO8859-1"); 

     for (byte b : encoding1) { 
      System.out.printf("%x ",b); 
     } 
    } 
} 

내가 확실하지 않다 :

public String getncodedSubject(String text) { 
     if (text == null || text.isEmpty()) { 
       return ""; 
     } 
     try { 
      byte[] encoding1 = subject.getBytes("UTF-8"); 
      String string1 = new String(encoding1, 0, encoding1.length); // Default encoding of my platform is UTF-8 
      byte[] encoding2 = string1.getBytes("ISO8859-1");//ISO-8859-1 (ISO Latin 1) Character Encoding 
      char[] hexaChars = Hex.encodeHex(encoding2); 
      StringBuilder str = new StringBuilder(); 
      for(int i=0;i<hexaChars.length;i = i+2){ 
       str.append("%"); 
       str.append(hexaChars[i]); 
       str.append(hexaChars[i+1]); 
      }    
      return str.toString(); 
     } catch (UnsupportedEncodingException e) { 
      System.out.println(e); 
     } 
     return ""; 
    } 

더 파고 후, 라틴어 인코딩 된 문자열을 얻는 것 같다? 내 server.xml도 확인했습니다.

-1

답장을 보내 주셔서 감사합니다. 더 많은 조사를 한 후에, 아래는 나의 관찰이다.

JSP를 사용하지 않고 Mason (Perl + HTML)을 사용하여 내 페이지를 렌더링하고 있습니다. 그래서 브라우저에서 UTF-8 인코딩 된 문자열을 제출하도록 페이지에서 인코딩 유형을 지정할 수 없었습니다.

이제 프로그래밍 방식으로 "ISO8859-1"(라틴어)로 인코딩하고 UTF-8로 인코딩하여 소비 할 실제 문자열을 얻습니다.

기본 인코딩을 사용하는 대신 UTF-8 인코딩을 사용하여 매개 변수를 제출하도록 Mason (Perl + HTML)에서 인코딩 유형을 지정하는 방법이 있음을 알려주십시오. 당신이 사용하는 경우

import java.nio.charset.CharsetDecoder; 
import java.nio.charset.Charset; 
import java.util.Arrays; 

public class Main { 
    public static void main(String[] args) throws Exception { 
     byte[] encoding1 = "ä»¥ä¸‹ä¾¿æ˜¯æœ‰å…³æ­¤é—®é¢˜çš„æ‰€æœ‰ä¿¡æ ¯".getBytes("ISO8859-1");     
     String s = new String(encoding1, "UTF-8"); 
     System.out.println(s); 
    } 
}