标题:关于ASP使用IE8下载文件,文件内容乱码问题
只看楼主
徐昊
Rank: 1
来 自:湖北
等 级:新手上路
帖 子:2
专家分:0
注 册:2018-5-9
 问题点数:0 回复次数:1 
关于ASP使用IE8下载文件,文件内容乱码问题
先说一下功能需求:
,在公司网上点击这个黄色按钮,会从服务器下载一个.tif的文件,主要是为了方便查看各种单的信息。
这是我的代码:
程序代码:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<!--#include file="conn.asp"-->
<!--#Include File="chk_Login.asp"-->
<!--#Include File="sys_Config.asp"-->

<%
dim  s_fpcnnum ,s_flag,s_fpath,sql,place,s_realpath,s_filename
s_fpcnnum= Trim(Request.QueryString("n"))
s_flag= Trim(Request.QueryString("f"))
s_fpath ="D:/joblogdata/Fpcn/" 
'Response.Write  s_fpcnnum   '变量n获取的是发票编号
'Response.Write s_flag  '变量f获取的是选择打开的附件编号 1-6
'Response.Write s_fpat '文件存储绝对路径
sql = "select s_DeliveryFile,s_ExportItemFile,s_ExportReplyItemFile,s_SignItemFile, s_SignItemReplyFile,s_PackBoxItemFile,s_Addtime from t_Fpcnf where s_DeliveryNum='"&s_fpcnnum&"'"
'查询各个发票信息
'Response.Write sql
set place=conn.execute(sql)
'place 执行的查询结果
'Response.Write place("s_ExportItemFile")    '如查询出仓单
If place.eof or place.bof Then
Response.Write("查询不到附件内容,请联系管理员确认附件是否上传成功,即是否存在该附件!")
Else
    'if place("s_ExportItemFile") <> "" then
    'Response.Write place("s_ExportItemFile")
    'end if
    '如果出仓单存在,就打印出来
    Select Case s_Flag
         Case "1" s_filename=place("s_ExportItemFile")          '出仓申请单
         Case "2" s_filename=place("s_ExportReplyItemFile")    '出仓单回执
         Case "3" s_filename=place("s_DeliveryFile")         '送货单
         Case "4" s_filename=place("s_PackBoxItemFile")        '装箱单
         Case "5" s_filename=place("s_SignItemFile")            '货物签收单
         Case "6" s_filename=place("s_SignItemReplyFile")    '货物签收单回执
End Select
    s_realpath = s_fpath&Year(place("s_Addtime"))&"/"&GetTimePath(place("s_Addtime"),0)&"/"&s_fpcnnum&"/"&s_filename
    'Response.Write s_realpath
     Dim strchar,fliesend,objectFile,objfile,objStream
     Const loadfilesize=32768 '32KB,也可取其它值,单位:字节
    fliesend=0 
      TransferFile = True 
    Set objectFile = Server.CreateObject("Scripting.FileSystemObject") 
      Set objfile = objectFile.GetFile(s_realpath) 
      Set objStream = objfile.OpenAsTextStream(1,-1)
    
    Response.Clear()
      Response.AddHeader "ContentType","application/octet-stream"
    Response.AddHeader "Content-Disposition","attachment;filename="&s_filename 
      Response.AddHeader "content-length",objfile.Size 
       Do While Not objStream.AtEndOfStream 
     strchar = objStream.Read(1) 
     Response.BinaryWrite(strchar) 
     fliesend = fliesend + 1 
     If (fliesend MOD loadfilesize) = 0 Then 
       Response.Flush 
       If Not Response.IsClientConnected Then 
         TransferFile = False 
         Exit Do 
       End If 
     End If 
   Loop
  Response.Flush 
  If Not Response.IsClientConnected Then
    TransferFile = False
  end if
  objStream.Close 
  Set objStream = Nothing 
  Set objectFile = Nothing 
  Response.End
end if
%>

现在问题是在采用低版本的IE浏览器,会弹出一个下载框,下载的是一个HTML文档,打开后里面内容是乱码。而使用其他高版本的IE浏览器可以正常下载,预览的类似于是一张图片的效果。我在网上找的解决方案(没有找到ASP相关的程序源码),针对于的方案,说需要使用Server.UrlEncode把文件名(文中的s_filename)转一下编码。我找到这个东西去ASP程序里面试了一下,报错,不清楚在ASP去如何实现这个转码操作。
我今天刚注册的论坛账号,也是刚开始接触ASP以及VB,所以有些东西还没能掌握。也是希望前辈们能给我一个方案,拜谢各位大佬。
搜索更多相关主题的帖子: ASP 文件 If Response Write 
2018-05-09 13:27
徐昊
Rank: 1
来 自:湖北
等 级:新手上路
帖 子:2
专家分:0
注 册:2018-5-9
得分:0 
一位大佬都没路过的,真是有点忧伤。
关于这个问题,我依旧没能解决,但我自己的最终的猜想就是编码的问题。我去详细的看了一下整个程序的编码的格式。首先,frameset框架集里面就定义了网页的编码格式为950,big5。而我这个子网页则是在头部链接下的孙子(头部链接的子网页的子网页的一个小链接);其次在这个功能页面中,<!--#Include File="sys_Config.asp"-->这个个包含的这个页面也是定义的950,big5的编码格式。所以我觉得编码没能得到统一。虽然我使用了Response.Clear(),我对他也不是太了解。我以为它的作用能够清掉之前头部编码的定义,然后好像并没能达到效果。所以说这个网页的编码应该还是936(简体中文)或者950(繁体中文)或者big5(繁体中文)。而我打开的附件含有中文字符,IE8不能直接帮你转,在高版本的浏览器好像可以。所以解决方法是需要把文件名,额外的转成utf-8的编码格式。(很遗憾的是,我写不出来)
补充一下的就是,为什么我在头部定义了一个936,在高版本的IE浏览器上,虽然可以正常打开附件,但文件名是乱码,所以加上了936,文件名就好了。具体原因我也弄不清楚,本应该页面定义是繁体,而文件名也是繁体,在一个编码情况下,应该没啥问题,但它就是乱码了。
情况大致上是这样,这其中有的为我的想法,没经过严格测试,可能会存在有错误的地方,水平有限,希望别误导人就好!
2018-05-11 13:32



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-486788-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.243031 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved