기존 Jeus 에서 구동되던 WAS를 LENA WAS 로 전환 중에 있음.
기존 Jeus 서버도 UTF-8 설정이었고 LENA 도 동일하게 맞췄으나, LENA WAS 의 어플리케이션에서는 첨부파일명의 한글이 제대로 표시되지 않음.
다음은 문제 현상에 대한 설명
_
로 대체되어 표시됨?
로 표시됨.fileDownload.do
와 같은 이름으로 다운로드가 돼서 사용자 입장에서는 열람 조차 불가. (파일명 및 확장자를 변경하면 정상 열람 가능, 즉 파일 내용이 손상이 있는 게 아님)서버 설정 단에서 해결을 시도하였으나 실패함. 이유는 다음과 같음.
Content-Type: application/octet-stream;charset=EUC-KR
결국 그래서 소스 수정을 하러 감
HTTP 다운로드 시 Header 붙이는 부분을 수정하였다.
fileName = URLEncoder.encode(fileName, "UTF-8");
fileName = StringUtils.replace(fileName, "+", "%20);
// 이부분 코드는 URLEncoder.encode의 특성 상 공백 문자가 +가 되기 때문이며 그래서 UTF8 공백에 해당하는 문자열로 치환해줌
if (브라우저가 IE이면) {
// 기존 코드는 2016년에 작성된 거라 IE 브라우저를 고려했으나 이번 개선에서는 고려하지 않음.
} else {
String headerContent = new String("attachment; filename*=utf-8''" + fileName);
response.setHeader("Content-Dispoistion", headerContent);
}
실행 환경 (윈도우/리눅스) 관계 없이 UTF-8 로 인코딩하였으며
URLEncoder.encode()
직후 fileName 을 보면 UTF-8 문자열으로 휴먼 리더블한 문자열이 아니다.
filename*=utf-8''
← 파일명 앞에 이거를 붙여줌으로서 브라우저 단에서 뒤에 오는 문자열을 utf-8로 해석하는 과정을 거치게 되고
결과적으로는 정상적으로 파일명을 확인할 수 있었다.