在我的网络电子邮件服务器上,用户可以从他们的电子邮件中下载附件。
当他们收到一个不是英文的文件名时,文本在 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>
因此,我将文件名在 content-disposition 中传递的方式更改为以下内容,希望它在保存到客户端计算机之前正确地以 UTF-8 编码字符串:
Response.AddHeader "Content-Disposition","attachment; filename = " & Server.URLEncode(files(Ubound(files)))
现在我已经解决了一个问题,但我面临着两个新问题-_-
第一个问题是当我在 IE 8/9 中下载文件时文件名不再损坏,但它在文件扩展名的末尾添加了一个奇怪的 [1] 或 [2]。因此,如果我有 파일 1.docx,IE 会将文档保存为 파일 1.docx[1]
第二个问题是,在 chrome 中,浏览器从字面上获取 UTF-8 编码的字符串,因此它被保存为 파일%20%1.docx。请注意,文件的非英文部分显示正确,但空白区域显示为 Unicode 字符代码 20。
我该如何解决这个问题?