작년에도 비슷한 것때문에 질문을 받았는데...
그때도 마무리 짓지 못하고 IE의 문제로 보여진다고만 마무리했었다.
다시금 불거져 나왔다.
이번엔 새로운 증상도 추가되었는데
파일명 자체를 인식못해서 download.aspx라고 파일 저장다이얼로그가 나옴(특정 파일명에 한해서)
고로 뒤벼본결과 역시나 IE6,7의 헤더의 길이(지난번과 동일한 답변)가 지나치게 짧아서..
총 256바이트 중 차떼고 포떼고 하면
파일명으로 사용할수 있는것은 170바이트(글자) 남짓
문젠 아스키로면 170자이다보니
파일명 인코딩을 하면
실제로는 UTF-8의 파일명영역은 1,6,9배(문자의 코드의 영역에따라)로 크기가 늘어나버린다.
아래는 1차 조사때의 보고내용
約款チェック支援システムのファイルのダウンロードにおいてのファイル名切れ問題の調査
タウンロード・プロセスによる文字列(ファイル名)の変化
状態 | ファイル名 | 長さ | CharacterSet | 総サイズ | 制限 |
アップロード前 | あいうえおかきくけこさしすそたち.doc | 21 | UTF-8 | 55byte | |
アップロード後(サーバー) | [12345678]あいうえおかきくけこさしすそたち.doc | 31 | UTF-8 | 67byte | |
結果ファイル(サーバー) | [12345678]あいうえおかきくけこさしすそたち_ref.doc | 35 | UTF-8 | 71byte | |
結果ファイル(転送中) | %5b12345678%5d%e3%81%82%e3%81%84%e3%81%86%e3%81%88%e3%81%8a%e3%81%8b%e3%81%8d%e3%81%8f%e3%81%91%e3%81%93%e3%81%95%e3%81%97%e3%81%99%e3%81%9d%e3%81%9f%e3%81%a1_ref.doc | 163 | ASCII | 163byte | キャッシュパスのサイズが255~258(ブラウザによる)バイト以下 |
結果ファイル(クライアント) | 345678]あいうえおかきくけこさしすそたち_ref.doc | 32 |
Http Header
HTTP/1.1 200 OK |
Server: ASP.NET Development Server/8.0.0.0 |
Date: Thu, 18 Jun 2009 05:26:47 GMT |
X-AspNet-Version: 2.0.50727 |
Content-Disposition: attachment;filename=%5b12345678%5d%e3%81%82%e3%81%84%e3%81%86%e3%81%88%e3%81%8a%e3%81%8b%e3%81%8d%e3%81%8f%e3%81%91%e3%81%93%e3%81%95%e3%81%97%e3%81%99%e3%81%9d%e3%81%9f%e3%81%a1_ref.doc |
Cache-Control: private |
Content-Type: application/unknown; charset=utf-8 |
Content-Length: 326 |
文字の変換
文字 | CharacterSet | 一文字のサイズ | 長さ | 総サイズ |
あ | UTF-8 | 1~4バイト(可変) | 1 | 3バイト |
%E3%81%82 | ASCII | 1バイト | 9 | 9バイト |
UTF-8の規格
長さ | 対象 | サイズ |
一桁 | ASCII | 1バイト |
二桁 | 記号(ヨーロッパ文字) | 6バイト |
三桁 | 日本語、韓国語、中国語など | 9バイト |
四桁 | 12バイト |
암튼 아래 내용은 한글 관련이지만 어차피 비슷한 내용
http://www.hoons.kr/board.aspx?Name=QAASPNET&Mode=2&BoardIdx=3590&Key=&Value=
이건 마소의 서포트 내용
http://support.microsoft.com/kb/436616/ja
위의 내용에 실린 globalization을 설정해보았지만 역시나 해결불가..
인코딩후의 길이가 170 이상이면 zip압축으로 대체로 가닥을 잡았다.