本当にわからない問題があります。外部コンポーネントを使用せずに、ASP クラシック アプリでファイルをアップロードしようとしています。また、DB に保存されるテキストを投稿したいと考えています。ファイルのアップロードは完璧です。私はこのコードを使用しています: Upload Files Without COM v3 by Lewis E. Moten III
問題は、他のフォーム入力フィールドです。UTF-8 を使用していますが、UTF-8 になりません。つまり、スウェーデン文字の ä と ö は、Response.Write を使用して印刷すると、疑問符として表示されます。
ファイルを UTF-8 (BOM 付き) で保存し、メタ タグを追加して、ページが 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 ヘッダーを使用してリクエストをキャプチャし、UTF-8 ファイルとして保存しました。スウェーデン語の文字は本来あるべきように見えます (LiveHTTP ヘッダー GUI では正しく見えませんでしたが、GUI はself は正しいエンコーディングを使用しません)。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:
この質問は関連しているようです。フォームが multipart/form-data として投稿されると、UTF-8 テキストが文字化けします。しかし、彼らは ASP や IIS を使用していません。IIS で multipart/form-data にある種の文字エンコーディングを設定することは可能ですか? IIS7を使用しています。結局、私のリクエストのエンコーディングが間違っているのでしょうか? (私は今、文字エンコーディングの世界で本当に迷子になっています)