我在使用ASp无组件上传的到数据库时中文出现乱码,英语不会。 下面是代码:
<% 
  Session.Timeout = 300
  FormSize = Request.TotalBytes 
  FormData = Request.BinaryRead(FormSize) 
  
  Set Fields = GetUpload(FormData)
  
  filetitle=fields("filetitle").value
  fileSM=fields("fileSM").value
  selLb=fields("selLb").value  fileDate=fields("fileDate").value
  
  f1contType=fields("filecontent").ContentType  
  filename=fields("filecontent").filename
  mydata=fields("filecontent").value set rs=server.createobject("adodb.recordset")
 rs.open "select top 1 * from filetab",Downconn,1,3
 rs.addnew 
 rs("filetitle")=filetitle
 rs("fileExplain")=fileSM
 rs("fLb")=selLb
 
 rs("UploadDate")=fileDate
 rs("filename")=filename
 rs("fileContent").appendchunk mydata rs.update
 rs.close
 set rs=nothing
 response.redirect "M4_list.asp"
 
 %>  
    
<%
  Function GetUpload(FormData) 
  dim DataStart,DivStr,DivLen,DataSize,FormFieldData 
  
'分隔标志串(+CRLF)
    DivStr = LeftB(FormData,InStrB(FormData,str2bin(VbCrLf)) + 1) 

'分隔标志串长度
    DivLen = LenB(DivStr)
PosOpenBoundary = InStrB(FormData,DivStr)
PosCloseBoundary = InStrB(PosOpenBoundary + 1,FormData,DivStr)
Set Fields = CreateObject("Scripting.Dictionary")

while PosOpenBoundary > 0 And PosCloseBoundary > 0

'name起始位置(name="xxxxx"),加6是因为[name="]长度为6
   FieldNameStart = InStrB(PosOpenBoundary,FormData,str2bin("name=")) + 6
   FieldNameSize = InStrB(FieldNameStart,FormData,ChrB(34)) - FieldNameStart
   FormFieldName = bin2str(MidB(FormData,FieldNameStart,FieldNameSize)) 
   
   'filename起始位置(filename="xxxxx")
   FieldFileNameStart = InStrB(PosOpenBoundary,FormData,str2bin("filename=")) + 10
   If FieldFileNameStart < PosCloseBoundary And FieldFileNameStart > PosopenBoundary Then
      FieldFileNameSize = InStrB(FieldFileNameStart,FormData,ChrB(34)) - FieldFileNameStart
          FormFileName = bin2str(MidB(FormData,FieldFileNameStart,FieldFileNameSize))
   Else
     FormFileName = ""
   End If
   
   FieldFileCTStart = InStrB(PosOpenBoundary,FormData,str2bin("Content-Type:")) + 14
   If FieldFileCTStart < PosCloseBoundary and FieldFileCTStart > PosOpenBoundary Then
      FieldFileCTSize = InStrB(FieldFileCTStart,FormData,str2bin(VbCrLf & VbCrLf)) - FieldFileCTStart
  FormFileCT = bin2str(MidB(FormData,FieldFileCTStart,FieldFileCTSize)) 
   Else
      FormFileCT = ""
   End If
   
   DataStart = InStrB(PosOpenBoundary,FormData,str2bin(VbCrLf & VbCrLf)) + 4
   
   If FormFileName <> "" Then
      DataSize = InStrB(DataStart,FormData,DivStr) - DataStart - 1
  FormFieldData = MidB(FormData,DataStart,DataSize)
   Else
      DataSize = InStrB(DataStart,FormData,DivStr) - DataStart - 2
  FormFieldData = bin2str(MidB(FormData,DataStart,DataSize))
   End If
   
   '建立一个Dictionary集存储Form中各个Field的相关数据
   Set Field = CreateUploadField()
   Field.Name = FormFieldName
   Field.FilePath = FormFileName
   Field.FileName = GetFileName(FormFileName)
   Field.ContentType = FormFileCT
   Field.Length = LenB(FormFieldData)
   Field.Value = FormFieldData
   
   Fields.Add FormFieldName, Field
   PosOpenBoundary = PosCloseBoundary
   PosCloseBoundary = InStrB(PosOpenBoundary + 1,FormData,DivStr)
   
   Wend
   Set GetUpload = Fields
End Function 
%>
<%
'把二进制字符串转成普通字符串函数
Function bin2str(binstr)
  Dim varlen,clow,ccc,skipflag
   skipflag=0
   ccc = ""
 If Not IsNull(binstr) Then
  varlen=LenB(binstr)  For i=1 To varlen
   If skipflag=0 Then
  clow = MidB(binstr,i,1)
  '判断是否中文的字符
  If AscB(clow) > 127 Then
      ccc =ccc & Chrw(AscW(MidB(binstr,i+1,1) & clow))
  skipflag=1
  Else
  ccc = ccc & Chrw(AscB(clow))
  End If
   Else
  skipflag=0
   End If
  Next End If
bin2str = ccc
End Function'把普通字符串转成二进制字符串函数 
Function str2bin(varstr)
   str2bin=""
   For i=1 To Len(varstr)
       varchar=mid(varstr,i,1)
   varasc = Asc(varchar)
   If varasc<0 Then
     varasc = varasc + 65535
   End If
   If varasc>255 Then
      varlow = Left(Hex(Asc(varchar)),2)
  varhigh = right(Hex(Asc(varchar)),2)
  str2bin = str2bin & chrB("&H" & varlow) & chrB("&H" & varhigh)
   Else
   str2bin = str2bin & chrB(AscB(varchar))
   End If
   Next 
End Function '取得文件名(去掉Path) 
Function GetFileName(FullPath)
   If FullPath <> "" Then
      FullPath = StrReverse(FullPath)
  FullPath = Left(FullPath,InStr(1, FullPath,"\")- 1)
  GetFileName = StrReverse(FullPath)
   Else
      GetFileName = ""
   End If
End Function 
%><SCRIPT RUNAT=SERVER LANGUAGE=JSCRIPT> 
function CreateUploadField(){ return new uf_Init() } 
function uf_Init(){
this.Name = null 
this.FileName = null 
this.FilePath = null 
this.ContentType = null 
this.Value = null 
this.Length = null 

</SCRIPT> 
那位人有遇到,请说下,