[Spring] CSV 엑셀 다운로드시 한글 처리

Spring으로 웹 개발시 데이터를 CSV로 다운로드 하는 경우 컨텐츠 내용에 한글이 깨지는 경우가 발생한다.

다음과 같이 처리해주면 해결이 된다.


1. HttpServletResponse 를 Controller에 등록하기. 
public void listExcelExport(HttpServletResponse response) {
상기 내역처럼 response 객체가 필요하다.

2. request 객체에 컨텐츠 타입 설정하기. 
response.setContentType("application/ms-excel; charset=UTF-8");
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
3. 출력 스트림을 생성하고 UTF-8 에 대한 BOM을 추가한다. 
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을 기술해서 어떠한 타입의 엔디안을 사용하는지 파악하여 정확하게 인코딩을 해줄 수 있게 된다.

EncodingRepresentation
UTF-8EF BB BF
UTF-16 빅 엔디안FE FF
UTF-16 리틀 엔디안FF FE
UTF-32 빅 엔디안00 00 FE FF
UTF-32 리틀 엔디안FF FE 00 00
SCSU0E FE FF
UTF-EBCDICDD 73 66 73
BOCU-1FB EE 28


Share this

Related Posts

Previous
Next Post »