我有某种问题,在我的ASP.NET的HttpHandler,其上传文件的编码。该文件的内容在从一个ColdFusion网页这是使用一种叫做“ToBase64”隐藏的表单变量传递。

在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上述功能是错误的,但我对什么是正确的很迷茫?什么是正确的“匹配”,“Base64编码”之间从ColdFusion和字符串应该在.net编码的方式发送?

请注意,所有的代码“作品”,但文件的后续检索表明它要被加密的,我敢肯定,我有错误的编码在这里。

EDIT更新:

我添加先前省略枚举代码。我已经尝试了所有这些编码类型的;它们都导致“垃圾”。是:我已尝试每个这些变化的:

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

这些正常工作的无。当我看了你的建议的功能,它应该是Unicode。请注意,我想回到一个字节数组而不是转换后的字符串。还是很困惑。

解答:

我简单地消除了枚举和我写的函数调用StringToByteArray。相反,我编码以下内容:

byte[] binData = Convert.FromBase64String(fileContent); 
有帮助吗?

解决方案

看那Convert.FromBase64String()功能

其他提示

Base64是的编码方案,可用于表示二进制数据作为一系列的ASCII字符,以便它可以被包括在文本文件和在其中原始二进制数据是不可接受的电子邮件消息。下面的实施例示出编码和Unicode字符串的解码。让我知道这是你想要的,如果不是我能refind这进一步给你。

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