-
사파리에서 한글 첨부파일명이 깨질 경우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 파일 인코딩 소스 예제
12345678910111213141516171819202122232425262728293031323334353637383940414243string 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 'Development > ASP.NET' 카테고리의 다른 글
Http Module을 이용한 Custom Authentication(커스텀인증) 구현 (0) 2020.06.06 ClientSide <-> ServerSide간 호환되는 비대칭키 알고리즘 로직 (0) 2020.03.21 IIS Web.config에 설정해주어야 하는 보안 서버 설정 (0) 2020.03.07 페이지 수명 주기 (0) 2019.07.07 댓글