[SPRING] UTF-8 URL 디코드 / 인코딩
SPRINGUTF-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.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.나는 그 답을 여기에서 발견했다 : 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.자바 스크립트가 삽입 된 페이지에서 페이지 인코딩 설정을 시도 했습니까?
자바 스크립트가 삽입 된 페이지에서 페이지 인코딩 설정을 시도 했습니까?
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
-
==============================
4.시작 태그 바로 아래에 이것을 추가하여 페이지 인코딩이 UTF-8로 설정되어 있는지 확인하십시오.
시작
태그 바로 아래에 이것을 추가하여 페이지 인코딩이 UTF-8로 설정되어 있는지 확인하십시오.<meta charset="utf-8">
또한 JavaScript 파일이 UTF-8 인코딩으로 저장되었는지 확인하십시오. 텍스트 편집기 설정을 확인하십시오.
-
==============================
5.자바 스크립트 사용 :
자바 스크립트 사용 :
data=encodeURIComponent(data);
데이터를 인코딩하는 데 사용할 수 있으며 Java에서는 다음을 수행 할 수 있습니다.
data=java.net.URLDecoder.decode(data);
-
==============================
6.자바 스크립트 측면에서 문자열을 인코딩 할 필요가 없습니다. Java는 유니 코드를 지원하지 않으므로 디코딩을 다음과 같이 수행해야합니다.
자바 스크립트 측면에서 문자열을 인코딩 할 필요가 없습니다. Java는 유니 코드를 지원하지 않으므로 디코딩을 다음과 같이 수행해야합니다.
output = new String (input.getBytes ( "ISO-8859-1"), "UTF-8");
from https://stackoverflow.com/questions/8147837/utf-8-url-decode-encode by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Javascript에서 모델 속성에 액세스하는 방법 (0) | 2019.02.17 |
---|---|
[SPRING] 봄 보안, 후행 슬래시 및 URL의 점 (0) | 2019.02.17 |
[SPRING] Java에서 정적 메서드를 쉽게 조롱 할 수있는 방법 (jUnit4) (0) | 2019.02.17 |
[SPRING] Apache Tiles의 더 나은 대안 (0) | 2019.02.17 |
[SPRING] java.lang.NoSuchMethodError : org.slf4j.spi.LocationAwareLogger.log (0) | 2019.02.16 |