質問

ファイルをアップロードするASP.NET HTTPHandlerのエンコーディングに何らかの問題があります。ファイルの内容は、" ToBase64"と呼ばれるものを使用しているColdFusion Webページから非表示のフォーム変数で渡されます。

ColdFusionでは、ファイルコンテンツをフォームに配置するために使用されるコードは次のとおりです。

<cffile action="readBinary" file="#FileName#" variable="objBinaryData">
    <cfset b64file = #toBase64(objBinaryData)#>
<form name="sendToHandler" 
           action="http://myserver/mysite/UploadHandler.ashx" method="post">
   <cfoutput>
       <input type="hidden" name="objBinaryData" value="#b64file#" />

UploadHandler.ashxが投稿されると、次のようにフォームから文字列が取得されます。

            string fileContent = context.Request.Form["objBinaryData"];

次に、次のように文字列をバイト配列に変換しています:

            byte[] binData = StringToByteArray(fileContent, EncodingType.ASCII);

文字列の変換に使用している関数は次のとおりです。

        public static byte[] StringToByteArray(string str, EncodingType encodingType)
    {
        System.Text.Encoding encoding = null;
        switch (encodingType)
        {
            case EncodingType.ASCII:
                encoding = new System.Text.ASCIIEncoding();
                break;
            case EncodingType.Unicode:
                encoding = new System.Text.UnicodeEncoding();
                break;
            case EncodingType.UTF7:
                encoding = new System.Text.UTF7Encoding();
                break;
            case EncodingType.UTF8:
                encoding = new System.Text.UTF8Encoding();
                break;
        }
        return encoding.GetBytes(str);
    }
public enum EncodingType
    {
        ASCII,
        Unicode,
        UTF7,
        UTF8
    }

EncodingType.ASCIIで上記の関数を呼び出すのは間違っていることは明らかですが、何が正しいのか非常に混乱していますか?適切な「一致」とは何ですか&quot; Base64&quot;の間ColdFusionから送信された文字列を.Netでエンコードする方法

すべてのコードが「機能する」ことに注意してください。しかし、その後のファイルの取得では、ファイルがスクランブルされていることが示され、ここで間違ったエンコーディングを使用していると確信しています。

編集-更新:

以前に省略した列挙コードを追加しました。これらのエンコーディングタイプをすべて試しました。それらはすべて「ゴミ」になります。つまり、これらのバリエーションをそれぞれ試しました:

byte[] binData = StringToByteArray(fileContent, EncodingType.ASCII);
byte[] binData = StringToByteArray(fileContent, EncodingType.Unicode);
byte[] binData = StringToByteArray(fileContent, EncodingType.UTF7);
byte[] binData = StringToByteArray(fileContent, EncodingType.UTF8);

これらのどれも適切に動作しません。私があなたの提案された機能を読んだとき、それはユニコードでなければなりません。変換された文字列ではなく、バイト配列を返したいことに注意してください。まだ非常に混乱しています。

回答:

列挙型とStringToByteArrayと呼ばれる関数を単に削除しました。代わりに、次をコーディングしました:

byte[] binData = Convert.FromBase64String(fileContent); 
役に立ちましたか?

解決

Convert.FromBase64String()関数をご覧ください

他のヒント

Base64は、バイナリデータを一連のASCII文字として表現できるようにするエンコードスキームであるため、生のバイナリデータが受け入れられないテキストファイルや電子メールメッセージに含めることができます。以下の例は、Unicode文字列のエンコードとデコードを示しています。これがあなたが望んでいたものであるかどうかを教えてください。そうでない場合、私はあなたのためにこれをさらに見つけることができます。

//Encoding
 public static string StringToBase64 (string src) {

    // Get's byte representation unicode string
    byte[] b = Encoding.Unicode.GetBytes(src);

    // Returns Base64-encoded string
    return Convert.ToBase64String(b);

}
//Decoding
public static string Base64ToString (string src) {

    // Decodes Base64-encoded string to a byte array
    byte[] b = Convert.FromBase64String(src);

    // Returns decoded Unicode string
    return Encoding.Unicode.GetString(b);
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top