레이블이 한글깨짐인 게시물을 표시합니다. 모든 게시물 표시
레이블이 한글깨짐인 게시물을 표시합니다. 모든 게시물 표시

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 {
 :
 :
}