다음과 같이 처리해주면 해결이 된다.
1. HttpServletResponse 를 Controller에 등록하기.
public void listExcelExport(HttpServletResponse response) {상기 내역처럼 response 객체가 필요하다.
2. request 객체에 컨텐츠 타입 설정하기.
response.setContentType("application/ms-excel; charset=UTF-8");3. 출력 스트림을 생성하고 UTF-8 에 대한 BOM을 추가한다.
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
OutputStream out = response.getOutputStream();
out.write(0xEF);
out.write(0xBB);
out.write(0xBF);
4. 이후 컨텐츠 내역을 출력한다.
out.write(.... contents ....);
out.flush();
참고자료 :
https://ko.wikipedia.org/wiki/%EB%B0%94%EC%9D%B4%ED%8A%B8_%EC%88%9C%EC%84%9C_%ED%91%9C%EC%8B%9D
참고자료를 요약하면 BOM (Byte Order Mark)로 유니코드의 엔디안을 구별하기 위해 사용하는 문자를 설정해준다.
이를 통해서 UTF-XXX에 따라 엔디안의 종류를 맞춰주는 작업을 한다.
즉 출력 스트림의 맨 앞에 BOM을 기술해서 어떠한 타입의 엔디안을 사용하는지 파악하여 정확하게 인코딩을 해줄 수 있게 된다.
Encoding | Representation |
---|---|
UTF-8 | EF BB BF |
UTF-16 빅 엔디안 | FE FF |
UTF-16 리틀 엔디안 | FF FE |
UTF-32 빅 엔디안 | 00 00 FE FF |
UTF-32 리틀 엔디안 | FF FE 00 00 |
SCSU | 0E FE FF |
UTF-EBCDIC | DD 73 66 73 |
BOCU-1 | FB EE 28 |
EmoticonEmoticon