복붙노트

[SPRING] UTF-8 URL 디코드 / 인코딩

SPRING

UTF-8 URL 디코드 / 인코딩

내 URL에 다음과 같은 Ajax 요청을 보내도록 지시한다.

url += '/' + something + '/' + id;
var response;
$.ajax({
    async : false,
    type: 'DELETE',
    url: url,
 ...

내 removeId는 UTF-8 문자를 포함하는 변수입니다. 자바 측에서 그 변수를 처리 할 것이다.

@RequestMapping(value = "/something/{id}", method = RequestMethod.DELETE)
    public void myMethod(HttpServletResponse response, @PathVariable String id) {
    ...

그러나 UTF-8 문자가 이상한 것으로 변하기 때문에 Java 측의 id 변수는 원래와 다릅니다.

자바 스크립트 측에서 UTF-8 문자를 보내고 Java 측에서 다시 변환하려면 어떻게해야합니까? (Spring 3에서는 REST, 웹 서버는 Tomcat 7)?

PS 1 : encodeUriComponent를 사용하지 않아도 내 URL이 자체적으로 인코딩 된 것 같습니다.

PS 2 : 질문을 더 명확하게하기 :

i.e. my id variable is araç and sent URL is: localhost:8080/sdfasf/ara%C3%A7 

그 id 변수에 해당 값이있는 것을 볼 때 :

araç

대신에:

ara%C3%A7 

Spring (또는 Tomcat)이 자동으로 수행합니까? 컨트롤러에 경로 변수로 올 때 자동으로 디코드 할 수있는 방법이 있습니까?

URLDecoder.decode(id,"UTF-8");

자동으로 변환됩니다)

해결법

  1. ==============================

    1.id 값은 utf-8 대신 iso-8859-1 charset을 사용하여 디코딩 된 것으로 보입니다. url의 경로 부분의 인코딩은 java EE에 지정되어 있지 않으며이를 설정하는 표준 API가 없습니다. 쿼리 매개 변수의 경우 매개 변수에 액세스하기 전에 request.setCharacterEncoding을 사용하여 올바르게 디코딩되도록 할 수 있습니다. CharacterEncodingFilter는 경로 매개 변수에 영향을주지 않지만 정확하게 수행합니다.

    id 값은 utf-8 대신 iso-8859-1 charset을 사용하여 디코딩 된 것으로 보입니다. url의 경로 부분의 인코딩은 java EE에 지정되어 있지 않으며이를 설정하는 표준 API가 없습니다. 쿼리 매개 변수의 경우 매개 변수에 액세스하기 전에 request.setCharacterEncoding을 사용하여 올바르게 디코딩되도록 할 수 있습니다. CharacterEncodingFilter는 경로 매개 변수에 영향을주지 않지만 정확하게 수행합니다.

    Tomcat에서이 작업을 수행하려면 server.xml의 Connector 요소에 대한 URIEncoding 속성을 "utf-8"로 설정해야합니다.

    자바 웹 애플리케이션에서 문자 인코딩에 대해 알고 싶었던 적이 있다면 비슷한 질문에 대한이 훌륭한 대답에서 찾을 수 있습니다.

  2. ==============================

    2.나는 그 답을 여기에서 발견했다 : http://forum.springsource.org/showthread.php?14063-How-to-set-setCharacterEncoding-on-Request

    나는 그 답을 여기에서 발견했다 : http://forum.springsource.org/showthread.php?14063-How-to-set-setCharacterEncoding-on-Request

    내 봄에 그 구성을 했어.

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

    UTF-8에서는 잘 작동합니다.

  3. ==============================

    3.자바 스크립트가 삽입 된 페이지에서 페이지 인코딩 설정을 시도 했습니까?

    자바 스크립트가 삽입 된 페이지에서 페이지 인코딩 설정을 시도 했습니까?

    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 
    
  4. ==============================

    4.시작 태그 바로 아래에 이것을 추가하여 페이지 인코딩이 UTF-8로 설정되어 있는지 확인하십시오.

    시작 태그 바로 아래에 이것을 추가하여 페이지 인코딩이 UTF-8로 설정되어 있는지 확인하십시오.

    <meta charset="utf-8">
    

    또한 JavaScript 파일이 UTF-8 인코딩으로 저장되었는지 확인하십시오. 텍스트 편집기 설정을 확인하십시오.

  5. ==============================

    5.자바 스크립트 사용 :

    자바 스크립트 사용 :

    data=encodeURIComponent(data);
    

    데이터를 인코딩하는 데 사용할 수 있으며 Java에서는 다음을 수행 할 수 있습니다.

    data=java.net.URLDecoder.decode(data);
    
  6. ==============================

    6.자바 스크립트 측면에서 문자열을 인코딩 할 필요가 없습니다. Java는 유니 코드를 지원하지 않으므로 디코딩을 다음과 같이 수행해야합니다.

    자바 스크립트 측면에서 문자열을 인코딩 할 필요가 없습니다. Java는 유니 코드를 지원하지 않으므로 디코딩을 다음과 같이 수행해야합니다.

    output = new String (input.getBytes ( "ISO-8859-1"), "UTF-8");

  7. from https://stackoverflow.com/questions/8147837/utf-8-url-decode-encode by cc-by-sa and MIT license