C# 解码XML时,base64字符串中的字符无效
我们有一个Winform客户端应用程序,它使用我们编写的web服务。此客户端应用程序请求包含在XML文件中的文档,通常是写入XML文件中base64编码二进制字段的PDF 客户端成功下载、解码并正确打开99%的文档 但是,当客户端进行此调用时,我们开始遇到一些文件失败:C# 解码XML时,base64字符串中的字符无效,c#,asp.net,xml,base64,C#,Asp.net,Xml,Base64,我们有一个Winform客户端应用程序,它使用我们编写的web服务。此客户端应用程序请求包含在XML文件中的文档,通常是写入XML文件中base64编码二进制字段的PDF 客户端成功下载、解码并正确打开99%的文档 但是,当客户端进行此调用时,我们开始遇到一些文件失败: byte[] buffer = Convert.FromBase64String(xNode["fileIMAGE"].InnerText); System.FormatException- Message="Invalid
byte[] buffer = Convert.FromBase64String(xNode["fileIMAGE"].InnerText);
System.FormatException-
Message="Invalid character in a Base-64 string."
Source="mscorlib"
我们已经将base64 blob从XML文件写入了文本文件。我没有看到任何“\0”字符。我可以发布整个blob,但它相当大
有什么想法吗?问题已解决 为了从服务器上传输文件,我们使用回调函数读取/写入文件块。我们对每个区块进行了基本编码。错 解析-将所有块写入全局memorystream对象。在回调结束时,执行base64编码 在回调函数中:
if (brData.ChunkNo == 1)
{
// Set the Content-type of the file
if (brData.MimeType.Length < 1)
{
mimeType = "application/unknown";
}
else
{
mimeType = brData.MimeType;
}
msbase64Out = new MemoryStream();
}
if (brData.bytesJustRead > 0)
{
fileMS.WriteTo(msbase64Out);
}
if (brData.bytesRemaining < 1)
{
byte[] imgBytes = msbase64Out.ToArray();
string img64 = Convert.ToBase64String(imgBytes);
viewdocWriter.WriteString(img64);
}
if(brData.ChunkNo==1)
{
//设置文件的内容类型
if(brData.MimeType.Length<1)
{
mimeType=“应用程序/未知”;
}
其他的
{
mimeType=brData.mimeType;
}
msbase64Out=新内存流();
}
如果(brData.bytesJustRead>0)
{
fileMS.WriteTo(msbase64Out);
}
如果(brData.bytes剩余值小于1)
{
字节[]imgBytes=msbase64Out.ToArray();
字符串img64=Convert.tobase64字符串(imgBytes);
viewdocWriter.WriteString(img64);
}
msbase64Out是一个全局内存流,每次调用回调时都会写入该流。
viewdocWriter是一个全局XML编写器,负责编写发送到客户端应用程序的XML流。是否可以添加一些代码来报告
isalnum()
、+
或/
中不包含的所有字符?这应该会留下一大堆换行符或crlf或类似的内容,结尾加上填充,还有你的神秘角色。我坐在这里编写一个测试应用程序来解析生成的字符来测试这个东西。试图实现这里提供的解决方案,base64 blob的主体中有=(等号)。我不认为这是一个有效的Base64字符(AZ z Z 0~9+/),而不是在结尾填充。@ PAPARUH,HRM,在中间的那个<代码>=<代码>听起来很麻烦。你能在小的输入上尝试你的编码程序吗?生成10个字节到10千字节之间的随机字节字符串,也许您会意外地生成一个,这说明了问题。blob是否可能是多个Base64对象,每个对象都以=填充结尾?