본문 바로가기
Spring

[Spring] Springframework, Ajax에서 한글이 물음표로 나오는 현상

by Real Iron 2019. 2. 27.

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]