2017년 3월 14일 화요일

ajax에서 return 값을 json 형태 또는 text 형태로 반환 받았을 경우 한글이 깨지는 경우의 대처 방법

ajax 호출 뒤 결과 메시지의 한글이 ???로 표기되어 나타날 경우, 여러가지 방법을 사용해 봤다.
사용해 본 결과들에 대해서 몇 가지 정리해보면,

@RequestMapping(value = "/upload")
@ResponseBody
public String upload(MultipartHttpServletRequest req, HttpServletRequest request) throws IOException {
 :
 :
  strResult = URLEncoder.encode(strResult, "UTF-8");
 :
 :
  return strResult;
}

Spring의 Controll 단에서 return 되는 문자에 대해서 URLEncoder.encode를 사용해서 문제를 해결했다.
Client단의 ajax success 부분에 문자를 변환해서 처리함.
var Ca = /\+/g;
var fileInfo = decodeURIComponent(data.replace(Ca, " "));

근데 다른 사람의 브라우저에서는 undefined라는 메시지가 나오면서 ajax 결과가 정상적으로 반영되지 않는 문제를 발견했다.
모든 사람의 브라우저가 다 안되는 것이 아니라 몇 몇 브라우저에서 문제가 발생했다.
charset의 문제로 보여지며 utf-8 이 강제로 iso-8859-1 변환되고 있는 것이 아닌가 싶다.

Spring의 Controll 단에서 utf-8로 강제로 변환해서 처리하고 나니 기존의 오류가 나던 브라우저들도 문제 없이 동작함.

@RequestMapping(value = "/upload", produces = "application/text; charset=utf8")
@ResponseBody
public String upload(MultipartHttpServletRequest req, HttpServletRequest request) throws IOException {
 :
 :
}

댓글 없음:

댓글 쓰기