* 8859_1 로 한글 파일명 처리
String filename = new String(file.getFilename().getBytes(), "8859_1");
response.setHeader("Content-Disposition", "attachment;filename=" + filename);
인코딩 - 8859_1의 비밀(?)
[출처] 인코딩 - 8859_1의 비밀(?)|작성자 우가가
Open source로 구해지는 java source code를 들여다 보면
public static void main(String[] args) throws Exception {for (int i = 0; i < 256; i++) {for (int j = 0; j < 256; j++) {byte[] bytes = new byte[] {(byte) i, (byte)j };String str = new String(bytes, "MS949");if (str.charAt(0) == 0xfffd) {System.out.println("for byte sequence{0x" + hex(i) + ", 0x" + hex(j)+ "} no character exists... getBytes()[0]=" + str.getBytes("MS949")[0]);} else if (str.length() > 1) {// 첫 바이트를 하나의 글자로 인식. i만 취하고 j 루프는 중지.System.out.println("For character{" + hex(i) + "} char = "+ str.charAt(0));break;} else {System.out.println("for character{" + hex(i) + ", " + hex(j)+ "} char = " + str);}}}}/** byte 출력용.*/public static String hex(int i ){String hex = Integer.toHexString(i);return (hex.length() > 2) ? hex.substring(hex.length() - 2) : hex;}
인식하는 바이트 값이 0x~0x7f 일 경우에는 8859_x 에서 사용되는 글자를 그대로 쓰며 이 때는 한 바이트가 하나의 글자와 매핑된다.
<< 다운로드 시 설정>>response.addHeader("Content-disposition", "attachment;filename=" + ... + "" );
물론 그 중에서도 많은 서버들이 위의 filename 을 ISO-Latin1(혹은 Latin1, 8859_1) 로 인코딩 해 보내기 때문에 같은 Latin 계열이라도 '8859_1' 즉 'Latin1'을 택하는 것이 좋다.
[출처] 인코딩 - 8859_1의 비밀(?)|작성자 우가가
출처 - http://blog.naver.com/PostView.nhn?blogId=anabaral&logNo=130043451093
'Development > JSP & Servlet' 카테고리의 다른 글
servlet - 3.0 비동기 기능 (0) | 2013.07.27 |
---|---|
servlet - 필터(filter) (0) | 2013.07.27 |
jsp - 스마트폰 인식(모바일 기기 os 검출) (0) | 2013.06.01 |
jsp - response.sendRedirect와 request.getRequestDispatcher (0) | 2012.12.24 |
jsp - 접속 URL 출력 (0) | 2012.12.06 |
down_file.canRead()
return true? – Xaerxess Aug 1 '12 at 16:01