http://cafe.naver.com/q69/63691




파일 다운로드 프로그램 작성시 한글파일명이 깨지는 것에 대해서

 

약 4일 동안 고생과 고생끝에 해결점을 찾았습니다.

이것이 정답인지 아닌지는 저도 확신할 수 없지만 어느정도 신뢰할만하다고 생각합니다. 해보시고 답글 부탁드립니다.


 기존에 나와 있는 방법중 신뢰할 만한 방법은 Web.config 부분에 다음과 같이 씁니다.


 <globalization requestEncoding="utf-8" responseEncoding="utf-8" />


 


파일 다운로드 부분의 코딩에 ( FileDown.aspx )


            Response.ClearHeaders()


            Response.AddHeader("Content-Type", "application/unknown")


            Response.AddHeader("Content-Disposition","attachment;filename="+Server.UrlEncode(Path.GetFileName(selectedItemName)).Replace("+","%20"))


            Response.ContentType = "multipart/form-data"


            Response.WriteFile(selectedItemName)


            ''''


같이 쓰며 Response.CharSet("포멧") 과 같은 부분은 안써 주셔도 됩니다.


 


이때 주의 하실점이 있습니다.


자신의 파일 다운로드 하는 코딩이 들어가 있는 페이지(FileDown.aspx) 의 document 의 charset 부분의 속성과


cordPage 속성, culture 부분의 속성에 아무것도 없어야 합니다.


만약 속성이 정의 되어 있으면(예: 한국어) 여지 없이 한글파일명이 깨져서 출력되게 됩니다.


 


저도 처음 이 방법을 쓰다가 필요성에 의해서 다음과 같이 바뀌었습니다.


아시다시피 AAAA.aspx?AAA=우리나라  라고 페이지를 직접 호출하게 될때 AAAA.aspx 부분에서


Request.QueryString("AAA") 를 하게 되면 "우리나라" 라는 글자 대신에 이상한 ㅁ??ㄹㅇ ??f 같은 글자들이 깨져서 나옵니다.


UTF-8 부분과의 문제인데 이걸 해결 하기 위해서


 


Web.config 부분을 다음과 같이 바꾸어 주었습니다.


 


<globalization requestEncoding="ks_c_5601-1987" responseEncoding="ks_c_5601-1987" />


 


이때 파일 다운로드 코딩 부분이 위와 동일 하다면 한글파일을 다운로드 하시게 되면 다시한번 여지 없이 한글파일들이


깨지게 됩니다. 이때가 가장 좌절을 많이 느끼게 되는 때입니다.


그래서 Response.CharSet("ks_c_5601-1987" ) 을 써주었지만 마찬가지 였습니다.


이럴때는 다음과 같이 수정하여서 해결 하였습니다.


 


 Response.ClearHeaders()


 Response.AddHeader("Content-Type", "application/unknown")


 Response.AddHeader("Content-Disposition","attachment; filename="+ HttpUtility.UrlEncode(Path.GetFileName(selectedItemName)).Replace("+","%20"))


 Response.ContentType = "multipart/form-data"


 Response.WriteFile(selectedItemName)


 


보시다시피 Server.UrlEncode 부분이 HttpUtility.UrlEncode 부분으로 변경되었습니다.


왜 그런지 이유는 사실 잘 모릅니다. 삽질에 삽질 끝에 그렇게 하니 되더군여.


 


결론은


1. Document 의 charset 속성과 cordPage 속성, culture 속성 에는 아무것도 지정하지 않았으며,


 


2. Web.Config 부분에는


<globalization requestEncoding="utf-8" responseEncoding="utf-8" />


   파일다운로드 부분에는 (FileDown.aspx)


            Response.ClearHeaders()


            Response.AddHeader("Content-Type", "application/unknown")


            Response.AddHeader("Content-Disposition","attachment;filename="+Server.UrlEncode(Path.GetFileName(selectedItemName)).Replace("+","%20"))


            Response.ContentType = "multipart/form-data"


            Response.WriteFile(selectedItemName)


또는


3. Web.Config 부분이 아래와 같이 변경된다면


<globalization requestEncoding="ks_c_5601-1987" responseEncoding="ks_c_5601-1987" />


   파일다운로드 부분은  (FileDown.aspx)


            Response.ClearHeaders()


            Response.AddHeader("Content-Type", "application/unknown")


            Response.AddHeader("Content-Disposition","attachment;filename="+HttpUtility.UrlEncode(Path.GetFileName(selectedItemName)).Replace("+","%20"))


            Response.ContentType = "multipart/form-data"


            Response.WriteFile(selectedItemName)


 


그럼 많은 도움 되셨으면 합니다. -鍾世-