본문 바로가기

카테고리 없음

java spring 파일다운로드 한글깨짐 처리

response 객체 한글깨짐 처리


금감원에서 테스트했던거 이번 재단에도 한글깨짐 처리 먹히넹


 

       /**

        * 다운로드시 한글 깨짐 방지 처리

        */

       private void setDisposition(String filename, HttpServletRequest request, HttpServletResponse response) throws Exception {

             String browser = getBrowser(request);

            

             String dispositionPrefix = "attachment; filename=";

             String encodedFilename = null;

       System.out.println("================================="+browser+"=============================");

             if (browser.equals("MSIE")) {

                    encodedFilename = URLEncoder.encode(filename, "UTF-8").replaceAll("\\+", "%20");

             } else if (browser.equals("Trident")) {       // IE11 문자열 깨짐 방지

                    encodedFilename = URLEncoder.encode(filename, "UTF-8").replaceAll("\\+", "%20");

             } else if (browser.equals("Firefox")) {

                    encodedFilename = "\"" + new String(filename.getBytes("UTF-8"), "8859_1") + "\"";

                    encodedFilename = URLDecoder.decode(encodedFilename);

             } else if (browser.equals("Opera")) {

                    encodedFilename = "\"" + new String(filename.getBytes("UTF-8"), "8859_1") + "\"";

             } else if (browser.equals("Chrome")) {

                    StringBuffer sb = new StringBuffer();

                    for (int i = 0; i < filename.length(); i++) {

                           char c = filename.charAt(i);

                           if (c > '~') {

                                 sb.append(URLEncoder.encode("" + c, "UTF-8"));

                           } else {

                                 sb.append(c);

                           }

                    }

                    encodedFilename = sb.toString();

             } else if (browser.equals("Safari")){

                    encodedFilename = "\"" + new String(filename.getBytes("UTF-8"), "8859_1")+ "\"";

                    encodedFilename = URLDecoder.decode(encodedFilename);

             }

             else {

                    encodedFilename = "\"" + new String(filename.getBytes("UTF-8"), "8859_1")+ "\"";

//                 

//                  LOGGER.info("====8859-1=====");

//                  LOGGER.info(new String( filename.getBytes( "8859_1"), "KSC5601"));

//                  LOGGER.info(new String( filename.getBytes( "8859_1"), "EUC-KR"));

//                  LOGGER.info(new String( filename.getBytes( "8859_1"), "UTF-8"));

//                  LOGGER.info("====KSC5601=====");

//                  LOGGER.info(new String( filename.getBytes( "KSC5601"), "8859_1"));

//                  LOGGER.info(new String( filename.getBytes( "KSC5601"), "EUC-KR"));

//                  LOGGER.info(new String( filename.getBytes( "KSC5601"), "UTF-8"));

//                  LOGGER.info("====EUC-KR=====");

//                  LOGGER.info(new String( filename.getBytes( "EUC-KR"), "8859_1"));

//                  LOGGER.info(new String( filename.getBytes( "EUC-KR"), "KSC5601"));

//                  LOGGER.info(new String( filename.getBytes( "EUC-KR"), "UTF-8"));

//                  LOGGER.info("====UTF-8=====");

//                  LOGGER.info(new String( filename.getBytes( "UTF-8"), "KSC5601"));

//                  LOGGER.info(new String( filename.getBytes( "UTF-8"), "8859_1"));

//                  LOGGER.info(new String( filename.getBytes( "UTF-8"), "EUC-KR"));

                   

             }

            

             response.setHeader("Content-Disposition", dispositionPrefix + encodedFilename);

            

             if ("Opera".equals(browser)){

                    response.setContentType("application/octet-stream;charset=UTF-8");

             }

    }

 

브라우저 정보 받아오기 메서드


       public String getBrowser(HttpServletRequest request) {

             String header = request.getHeader("User-Agent");

        if (header.indexOf("MSIE") > -1) {

            return "MSIE";

        } else if (header.indexOf("Trident") > -1) {   // IE11 문자열 깨짐 방지

            return "Trident";

        } else if (header.indexOf("Chrome") > -1) {

            return "Chrome";

        } else if (header.indexOf("Opera") > -1) {

            return "Opera";

        } else if (header.indexOf("Safari") > -1) {

            return "Safari";

        }

        return "Firefox";

       }