Ajax로 호출한 다음, 결과값을 alert으로 한글을 띄우려는데
자꾸 ???? ???? 로 나오는 것이었다.
서버 코드
@RequestMapping(value = "/add") public @ResponseBody String add() { return "성공했음"; } |
view 코드
$.ajax({ url : '/add', success : function(data) { alert(data); } }); |
구글신을 통해 여러가지 방법을 시도해봤다.
1) jsp상단에 추가
<%@ page language="java" contentType="text/html" pageEncoding="UTF-8"%>
이래도 안됨
2) ajax 코드에 추가하고
contentType: "application/x-www-form-urlencoded; charset=UTF-8",
서버에서 스트링을 UTF-8로 디코딩함
이래도 안됨
3) applicationContext.xml에 메시지컨버팅에 옵션을 넣음
<bean class="org.springframework.http.converter.StringHttpMessageConverter" >
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
</list>
</property>
</bean>
이래도 안됨
4) 서버에서
String message = new String(message.getBytes("ISO-8859-1"), "UTF-8");
캐릭터 인코딩함
이래도 안됨
서버코드 안에서 찍어보면 분명 한글이 보이는데 얼럿만 띄우면 물음표다.;;
4번을 적용해보고 모든걸 다 적용해본 결과
마지막에 메시지컨버터에서 결국 ISO-8859-1 캐릭터셋으로 덮어써버리는 것이었다.
최종적인 해결 방법!!!
@RequestMapping(value = "/add", produces = "application/text; charset=utf8") public @ResponseBody String add() { return "성공했음"; } |
@ResponseBody를 통해 내릴 때 명시적으로 produces를 사용해서 utf-8로 인코딩을 해주면
드디어 UTF-8로 인코딩 된 값이 내려간다~!!
json을 내리는 경우라면 application/json; 으로.
출처: https://marobiana.tistory.com/112 [Take Action]