我在ASP.NET HTTPHandler(它上传文件)中存在某种编码问题。文件内容通过一个隐藏的表单变量从一个名为“ToBase64”的ColdFusion网页传递。什么是将字符串转换为字节数组的合适编码
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上述功能是错误的,但我对什么是正确的很迷茫?从ColdFusion发送的“Base64”与字符串应该在.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);
我不知道ColdFusion的,所以我不能建议您如何应该由任何构建在库(如果存在)进行处理,但你需要一个基地64解码器。 Base64是一种数据编码方案,而不是文本编码方案......您可以使用UTF8或ASCII或任何其他Base64编码方式。看看它的wiki页面:http://en.wikipedia.org/wiki/Base64 – rmeador 2009-08-03 19:09:22
这确实是CF正在做的事情。 ToBase64()已被弃用,但。你应该使用BinaryEncode()。见:http://cfquickdocs.com/cf8/#BinaryEncode – ale 2009-08-03 19:58:16