我有一个问题,我真的不明白。我正在尝试在ASP经典应用程序中上传文件,而不使用外部组件。我还想发布一些将存储在数据库中的文本。
文件上传完美,我正在使用这段代码:Upload Files Without COM v3 by Lewis E. Moten III
问题在于其他表单输入字段。我正在使用UTF-8,但它们没有以UTF-8结束。即瑞典字符å ä和ö显示为问号,如果我使用Response.Write打印它们。
我已将文件保存为UTF-8(带BOM),我已添加了meta标签以告知页面它处于UTF-8中。我已设置Response.CharSet =“UTF-8”。
将二进制转换为字符串的函数如下(这是可能出错的唯一地方,因为评论说它提取ANSI字符,但我认为它应该提取Unicode字符):。
Private Function CStrU(ByRef pstrANSI)
' Converts an ANSI string to Unicode
' Best used for small strings
Dim llngLength ' Length of ANSI string
Dim llngIndex ' Current position
' determine length
llngLength = LenB(pstrANSI)
' Loop through each character
For llngIndex = 1 To llngLength
' Pull out ANSI character
' Get Ascii value of ANSI character
' Get Unicode Character from Ascii
' Append character to results
CStrU = CStrU & Chr(AscB(MidB(pstrANSI, llngIndex, 1)))
Next
End Function
我已创建一个测试asp页面(multiparttest.asp)来复制此操作,需要使用Lewis E.Moten的上传文件才能使其正常工作(我已将他的文件添加到名为upload的子目录中)。
<%Response.CharSet = "UTF-8" %>
<!--#INCLUDE FILE="upload/clsUpload.asp"-->
<html>
<head>
<title>Test</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<%
Set objUpload = New clsUpload
Response.Write( objUpload.Fields("testInput").Value )
%>
<form method="post" enctype="multipart/form-data" action="multiparttest.asp">
<input type="text" name="testInput" />
<input type="submit" value="submit" />
</form>
</body>
</html>
我使用Firefox中的LiveHTTP Headers捕获了请求,并将其保存为UTF-8文件,瑞典字符看起来应该是正确的(它们在LiveHTTP header GUI中不正确,但我猜测GUI本身没有使用正确的编码)。这是POST请求的样子:
http://localhost/testsite/multiparttest.asp
POST /testsite/multiparttest.asp HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://localhost/testsite/multiparttest.asp
Cookie: ASPSESSIONIDASBBRBTT=GLDJDBJALAMJFBFBDCCIONHF; ASPSESSIONIDAQABQBTT=DIPHILKAIICKJOIAIMILAMGE; ASPSESSIONIDCSABTCQS=KMHBLBLABKHCBGPNLMCIPPNJ
Content-Type: multipart/form-data; boundary=---------------------------7391102023625
Content-Length: 150
-----------------------------7391102023625
Content-Disposition: form-data; name="testInput"
åäö
-----------------------------7391102023625--
HTTP/1.x 200 OK
Cache-Control: private
Content-Length: 548
Content-Type: text/html; Charset=UTF-8
Server: Microsoft-IIS/7.0
X-Powered-By: ASP.NET
Date: Tue, 10 Nov 2009 14:20:17 GMT
----------------------------------------------------------
非常感谢您的帮助!
10/11编辑:
我尝试将所有这些内容添加到ASP文件的顶部,由于在其他地方找到的不同建议,在此问题上没有任何不同的结果。
<%@Language=VBScript codepage=65001 %>
<%Response.ContentType="text/html"%>
<%Response.Charset="UTF-8"%>
<%Session.CodePage=65001%>
编辑11/11:
这个问题似乎与UTF-8文本在以multipart/form-data方式提交表单时出现乱码有关。但是他们没有使用ASP或IIS。在IIS中是否可以设置某种字符编码来处理multipart/form-data?我正在使用IIS7。也许我的请求确实存在错误的编码吗?(我现在真的迷失在字符编码世界中)