私の Web メール サーバーでは、ユーザーはメールから添付ファイルをダウンロードできます。
英語以外のファイル名を受け取ると、IE 8/9 ではテキストが壊れますが、Chrome/Firefox では問題なく表示されます。現在ダウンロードを処理しているコードは次のとおりです。
<%
attachfile = request("file")%>
<%
files = Split(attachfile,"\")
Set fso = CreateObject("Scripting.FileSystemObject")
Response.Clear
'Response.CharSet="UTF-8"
Response.ContentType = "application/unknown"
Response.AddHeader "Pragma", "no-cache"
Response.AddHeader "Expires", "0"
Response.AddHeader "Content-Transfer-Encoding", "binary"
Response.AddHeader "Content-Disposition","attachment; filename = " & files(Ubound(files))
Set objStream = Server.CreateObject("ADODB.Stream")
objStream.Open
objStream.Type = 1
objStream.LoadFromFile attachfile
Response.BinaryWrite objStream.Read
Response.Flush
objStream.Close : Set objStream = nothing
Set fso = Nothing
%>
</BODY>
</HTML>
そこで、クライアントのコンピューターに保存する前に文字列が UTF-8 で正しくエンコードされることを期待して、ファイル名が content-disposition で渡される方法を次のように変更しました。
Response.AddHeader "Content-Disposition","attachment; filename = " & Server.URLEncode(files(Ubound(files)))
これで 1 つの問題は解決しましたが、2 つの新しい問題に直面しています ---
最初の問題は、IE 8/9 でファイルをダウンロードしたときにファイル名が壊れなくなりましたが、ファイル拡張子の末尾に奇妙な [1] または [2] が追加されることです。つまり、파일 1.docx があった場合、IE はドキュメントを 파일 1.docx[1] として保存します。
2 つ目の問題は、Chrome では、ブラウザが UTF-8 でエンコードされた文字列をそのまま受け取るため、파일%20%1.docx として保存されることです。ファイルの英語以外の部分は正しく表示されますが、空のスペースは Unicode 文字コード 20 として表示されることに注意してください。
この問題を解決するにはどうすればよいですか?