ABOUT ME

TEAM TIFY Blog

Today
Yesterday
Total
  • 사파리에서 한글 첨부파일명이 깨질 경우
    Development/ASP.NET 2020. 5. 9. 22:02

    프로잭트를 진행하다...

    사파리에서(정확히는 iOS 웹 뷰에서 다운로드 받았을때) 한글 파일명이 인코딩 되어 다운되는 문제가 발생하였다.

    예를들어, 한글 파일.xlsx 명칭의 파일을 다운로드 받았는데.. 브라우져마다 아래와 같은 파일명으로 다운로드 받아졌다.

    IE (Internet Exploler) : 한글 파일.xlsx
    Chrome : 한글 파일.xlsx
    사파리 : %ED%95%9C%EA%B8%80%20%ED%8C%8C%EC%9D%BC.xlsx

    보다시피 사파리에서는 URL 인코딩 되어 파일이 다운로드 받아졌다..

    구글링을 통해... 브라우져 별로 파일명을 인코딩하여 해결 할 수 있었다

    ASP.NET 파일 인코딩 소스 예제

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    string sUserAgent = string.Empty;
    string sFileName = "한글 파일.xlsx";
     
    //브라우져 체크
    if (Request.UserAgent.ToUpper().IndexOf("MSIE"> -1
    {
        sUserAgent = "MSIE";
    }
    else if (Request.UserAgent.ToUpper().IndexOf("CHROME"> -1
    {
        sUserAgent = "Chrome";    
    }
    else if (Request.UserAgent.ToUpper().IndexOf("OPERA"> -1
    {
        sUserAgent = "Opera";    
    }   
    else if (Request.UserAgent.ToUpper().IndexOf("FIREFOX"> -1
    {
        sUserAgent = "Firefox";    
    }   
    else if (Request.UserAgent.ToUpper().IndexOf("SAFARI"> -1
    {
        sUserAgent = "Safari";    
    }
     
    //브라우져 별 파일 명 인코딩 
    switch(sUserAgent)
    {
        case "MSIE" : sFileName = URLEncoder.encode(sFileName, "UTF-8").replaceAll("\\+""%20");
            break;
        case "Chrome" : 
        case "Opera" : sFileName =  "\"" + new String(sFileName.getBytes("UTF-8"), "8859_1"+ "\"";
        case "Firefox" : sFileName =  "\"" + new String(sFileName.getBytes("UTF-8"), "8859_1"+ "\"";
            break;
        case "Safari" : utf8.GetString(utf8.GetBytes(sFileName));
            break;
        default : sFileName = URLEncoder.encode(sFileName, "UTF-8").replaceAll("\\+""%20");
            break;
    }
     
    Response.setHeader("Content-Disposition"string.Format("attachment;filename=\"{0}\".xls;",sFileName));
     
    //파일 다운로드 로직
    cs

    댓글

2017 TIFY Team All Rights Reserved.