错误:将Base64字符串转换并保存到文件中

时间:2017-12-26 07:08:38

标签: c# imap

*被修改

请原谅我,因为我可能不清楚这一点。抛出错误的代码是:

Convert.FromBase64String(base64)

是否有 另一种 将base64字符串转换为C#中的字节而不是上述方法?

我需要使用 C# 进行文件转换方面的帮助。我正在尝试将 base64 字符串转换到一个文件中,然后保存到我的桌面。要保存的文件是 文本 excel pdf 文件。我使用的代码是:

File.WriteAllBytes(@"C:\Users\User\Desktop\{thefilename}", Convert.FromBase64String(base64));

然而,我收到一个错误:

  

输入不是有效的Base-64字符串,因为它包含非基数64   字符,两个以上的填充字符或非法字符   填充字符之间

我尝试首先将base64保存到文本文件,然后使用enter image description here转换它以检查base64是否真的格式正确。当我这样做时,它将 base64转换为原始文件

请问我是如何解决此错误的?这个错误是由C#的限制引起的还是因为我有base64?我不认为它是后者,因为我能够将它在线转换为实际文件。除了我上面使用的方法之外,还有其他方法可以将base64转换为C#中的文件吗?

5 个答案:

答案 0 :(得分:1)

你必须填写" ="如果base64字符串的长度不是4的倍数,则在字符串的右边.i,e。

如果Base64字符串长度为7个字符,那么我们添加1" =" s

如果Base64字符串长度为6个字符,那么我们添加2" =" s

如果Base64字符串长度为5个字符,那么我们的字符串已经损坏了。因此,当base64字符串长度为1,5,11,16等时,不会出现这种情况。

答案 1 :(得分:0)

我怀疑您的Base64String前缀有data:image/pdf;base64。因此,您应该在转换为字节数组之前将其删除。

base64 = base64.Replace("data:image/pdf;base64,","");
File.WriteAllBytes(@"C:\Users\User\Desktop\{thefilename}", Convert.FromBase64String(base64));

答案 2 :(得分:0)

我之前尝试将base64字符串转换为文件jpgpdf。我认为它也适用于其他文件扩展。试试这个。

var imgByte = Convert.FromBase64String("base64");
var path = "..../file.jpg";

try{

     var _FStream = new FileStream(path, FileMode.Create);
     _FStream.GetAccessControl();
     _FStream.Write(imgByte, 0, imgByte.Length);
     _FStream.Close();
     _FStream.Dispose();

} catch (Exception ex){
     var errorMsg = ex.ToString();
}

答案 3 :(得分:0)

我可能找到了错误的答案。我能够通过打开我保存base64字符串的文本文件来解决错误,然后通过删除填充并再次重新添加来更新它。步骤如下:

  1. 将base64字符串保存到文本文件
  2. 打开文本文件
  3. 删除填充
  4. 保存文件。
  5. 重新添加已移除的填充
  6. 保存文件。
  7. 从两次更新的文本文件中获取base64字符串
  8. 致电方法Convert.FromBase64String(base64String);
  9. 我不确定是什么原因造成了这个问题。有谁知道为什么会这样?或者这是Windows操作系统问题,C#问题还是两者兼而有之?

答案 4 :(得分:0)

它可能是变体或过时的编码或任何数量的东西

您应该阅读Base64 Wiki

  

实现可能对用于的字母表有一些限制   代表一些位模式。这显然涉及最后两个   索引62和63的索引表中使用的字符和   用于填充的字符(在某些协议中可能是强制性的,   或在其他人中删除)

有几个实现和RFC,请注意变体汇总表

由于您无法向我们提供输入,我们不知道它是什么变体

如果输入是正确的长度,那么替换变体字符可能同样容易,再次无法知道因为无法看到输入

string corrected = input.Replace('-', '+').Replace('_', '/');
var decodedBytes = System.Convert.FromBase64String(corrected);
相关问题