꼬부기

Ajax return받은 한글 데이터 ??로 나오는 현상 해결 본문

코딩

Ajax return받은 한글 데이터 ??로 나오는 현상 해결

꼬북꼬북 꼬부기 2018. 12. 20. 16:26

개발 환경 : Window7, Tomcat7, Java8, STS, Spring 3.x

 

Ajax를 이용해 데이터를 넘기는 작업을 하던 중 아래와 같이 Java 단에서는 한글이 정상적으로 출력 되지만, Web에서 한글이 정상적으로 출력되지 않는 현상이 발생했습니다. 

 

 

오늘은 인터넷과 이전에 진행한 프로젝트를 뒤져가며 시도한 여러가지 방법들을 소개해볼까 합니다.

 

1. jsp 페이지 상단에 contentType 및 pageEncoding 추가하기.

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

이 코드가 기존 페이지에 있어서 따로 손대지않았지만, 해결 후에 제거하고 진행해보니 ??가 아닌 ëŠ”주소와 같이 아예 다른 문자로 깨져버렸습니다. 페이지의 문자들을 모두 UTF-8로 인식시키겠다고 선언하는 코드이니 꼭 추가해줍시다.

 

2.Java단, JSONObject를 return 하기 전 response.setCharacterEncoding("UTF-8");로 인코딩 타입 지정해주기

@RequestMapping(value = "/*.json")
@ResponseBody
public String json(@RequestBody HashMap<String, Object> params, HttpServletRequest request, HttpServletResponse response ) throws Exception {
   JSONObject jsonObject = new JSONObject();
   response.setCharacterEncoding("UTF-8");
   return jsonObject.toString(); 
}

 

뭐지.. 추가했는데도 아무 변화가 없습니다. 발생하는 원인이 다 다르지만 ②로 해결하신 분 있으면 댓글 좀 남겨주십시오

 

3. ajax에 contentType 추가하기

$.ajax({
      type        : "POST"
    , url         : url
    , data        : JSON.stringify(jData)
    , contentType : "application/json; charset:UTF-8"
    , dataType    : "JSON"
    , async       : false
    , success     : function(data) {

		console.log(data);

    }, error : function(request, status, error) {
    	console.log("code:" + request.status + "\n" + "error:" + error + "\n" + "errortext:" + request.responseText );
    }
});
4. Controller에 produces, contentType 추가하기

@RequestMapping(value = "/*.json", produces = "application/text; charset=UTF-8")
@ResponseBody
public String json(@RequestBody HashMap<String, Object> params, HttpServletRequest request, HttpServletResponse response ) throws Exception {

    JSONObject jsonObject = new JSONObject();
    response.setCharacterEncoding("UTF-8");
    return jsonObject.toString(); 
}
 
ajax에 추가한 contentType과 produces를 동일하게 맞춰주니 한글이 정상적으로 출력되었습니다!
 

 

몇번째 겪고, 해결하는 한글 인코딩 이지만 매번매번 새로운 느낌으로 해결하네요

 

제 글을 끝까지 읽어주셔서 감사합니다.

Comments