質問

私は本当に理解していない問題を抱えています。 私は外付け部品を使用せずに、従来のASPアプリケーションでファイルをアップロードしようとしています。私はまた、DBに格納されるいくつかのテキストを投稿したいです。 ファイルは、完全にアップロード私はこのコードを使用しています:<のhref =「http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=8525&lngWId=4」のrel = "nofollowをnoreferrerを「>ルイスE. Moten IIIによるCOM v3にせずにファイルをアップロードする

の問題は、他のフォーム入力フィールドです。私は、UTF-8を使用していますが、彼らはUTF-8としてアップ終わりません。すなわちスウェーデンの文字åAとö私はResponse.Writeをを使用してそれらを印刷する場合疑問符として表示されます。

私は(BOM付き)UTF-8でファイルを保存している、私はそれが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)を作成しました

、ルイスE. Motenからのアップロードのものは、それが(私がアップロードと呼ばれるサブディレクトリに自分のファイルを追加した)動作させるために必要とされます。

<%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>

私はスウェーデンの文字は、彼らが(彼らはLiveHTTPヘッダGUIで[OK]を見ていないはずですが、私はそれを推測しているように見える、FirefoxでLiveHTTPヘッダを使用して要求をキャプチャし、UTF-8ファイルとして保存していますそれは、自己が正しいエンコーディングを使用していない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
----------------------------------------------------------

この母校で任意の助けを歓迎です!

EDIT 10/11:

私は変わらない結果と、私は他の場所で、この問題に見つけた別の提案による、ASPファイルの先頭に、これらすべてを追加しようとしました..

<%@Language=VBScript codepage=65001 %>
<%Response.ContentType="text/html"%>
<%Response.Charset="UTF-8"%>
<%Session.CodePage=65001%>

EDIT 11/11:

この質問は<のhref = "https://stackoverflow.com/questions/546365/utf-8-text-is-garbled-when-form-is-posted-as-multipart-form-data、関連すると思われますフォームは、multipart / form-data のよう掲載されている場合「> UTF-8テキストが文字化けします。しかし、彼らはASPまたはIISを使用していません。それは、IISでのマルチパート/フォームデータの文字エンコーディングのいくつかの種類が設定することは可能ですか?私は、IIS7を使用しています。たぶん私の要求は、すべての後に間違ったエンコーディングがありますか? (私は本当に今の文字エンコーディングの世界で失われています)。

役に立ちましたか?

解決

CStrUのあなたの分析が正しいです。これは、シングルバイトANSI文字がクライアントによって送信されていることを前提としています。それはまたのVBScriptが実行されていることをクライアントとロケールの両方で使用されているコードページが同じであることを前提としています。

UTF-8を使用する場合は、

CStrUによって行われた仮定は常に不正確になります。そのコードページとして65001を持っているロケールが(私は65000を使用しますが、再び別のthatsの一つまたは二つがあると思います)、私の知る限りでは、ありません。

-

ここではテキストはUTF-8であると仮定し、交換機能があります

 Private Function CStrU(ByRef pstrANSI)

  Dim llngLength '' # Length of ANSI string
  Dim llngIndex '' # Current position
  Dim bytVal
  Dim intChar

  '' # determine length
  llngLength = LenB(pstrANSI)

  '' # Loop through each character
  llngIndex = 1
  Do While llngIndex <= llngLength

   bytVal = AscB(MidB(pstrANSI, llngIndex, 1))
   llngIndex = llngIndex + 1

   If bytVal < &h80 Then
    intChar = bytVal
   ElseIf bytVal < &hE0 Then

    intChar = (bytVal And &h1F) * &h40

    bytVal =  AscB(MidB(pstrANSI, llngIndex, 1))
    llngIndex = llngIndex + 1

    intChar = intChar + (bytVal And &h3f)

   ElseIf bytVal < &hF0 Then

    intChar = (bytVal And &hF) * &h1000

    bytVal =  AscB(MidB(pstrANSI, llngIndex, 1))
    llngIndex = llngIndex + 1

    intChar = intChar + (bytVal And &h3F) * &h40

    bytVal =  AscB(MidB(pstrANSI, llngIndex, 1))
    llngIndex = llngIndex + 1

    intChar = intChar + (bytVal And &h3F)

   Else
    intChar = &hBF
   End If

   CStrU = CStrU & ChrW(intChar)
  Loop

 End Function

CStrUはUTF-8で補正された状態でご使用例のページの出力が今間違って見えることに注意してください。 65001へのファイルのコードページを設定するためのアドバイスも必要条件です。あなたは、文字セットを設定しているので、あなたものResponse.Writeを使用して書かれたテキストをエンコードする際にUTF-8コード・ページを使用するようにASPを指示する必要があり、「UTF-8」にクライアントに送信されます。

他のヒント

これは任意の助けになるかどうかは知らないが、私はいくつかの<のhref =「http://jeppemannen.svenskablogg.se/2009/09/08/swfuploadandasp/」のrel = "nofollowをnoreferrerで働いています「> SWFUploadのユーティリティ(バッチで複数のファイルのアップロードを可能にするFlashプラグイン)を使用する従来のASP のコードを。

ASPのサンプルコードは、バイト/ Unicodeのデコードをソートし、いくつかの総合的なコードが含まれており、あなたはCHR(ASCB(MIDB(...について言及するものに似ています - おそらくあなたの問題に光を当てる可能性がある第二の例を見て。

"背中の日に"、私は ASPUpload に使用しました。フォームデータと戦った時間を過ごすことよりも、買いに安かったです。あなたはASPUploadから読んだ後、すなわち、入力 - ビットASP.NET、それは通常のフィールドの両方を行い、クエリのために利用可能なファイルをアップロードし、それは(IIRC)の古いのFormオブジェクトを破壊しないようにストリームが消費され、そしてを使用しようとすると、通常ののフォーム入力は失敗します。

あなたは同じアプリで両方のアプローチを使用することができます - だけでは両方とも同じページ要求の際に、いずれかを選択または他の、基本的に(通常着信MIMEに基づく)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top