*被修改
请原谅我,因为我可能不清楚这一点。抛出错误的代码是:
Convert.FromBase64String(base64)
是否有 另一种 将base64字符串转换为C#中的字节而不是上述方法?
我需要使用 C# 进行文件转换方面的帮助。我正在尝试将 base64 字符串转换到一个文件中,然后将保存到我的桌面。要保存的文件是 文本 , excel 或 pdf 文件。我使用的代码是:
File.WriteAllBytes(@"C:\Users\User\Desktop\{thefilename}", Convert.FromBase64String(base64));
然而,我收到一个错误:
输入不是有效的Base-64字符串,因为它包含非基数64 字符,两个以上的填充字符或非法字符 填充字符之间
我尝试首先将base64保存到文本文件,然后使用转换它以检查base64是否真的格式正确。当我这样做时,它将 base64转换为原始文件 。
请问我是如何解决此错误的?这个错误是由C#的限制引起的还是因为我有base64?我不认为它是后者,因为我能够将它在线转换为实际文件。除了我上面使用的方法之外,还有其他方法可以将base64转换为C#中的文件吗?
答案 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
字符串转换为文件jpg
和pdf
。我认为它也适用于其他文件扩展。试试这个。
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字符串的文本文件来解决错误,然后通过删除填充并再次重新添加来更新它。步骤如下:
Convert.FromBase64String(base64String);
我不确定是什么原因造成了这个问题。有谁知道为什么会这样?或者这是Windows操作系统问题,C#问题还是两者兼而有之?
答案 4 :(得分:0)
它可能是变体或过时的编码或任何数量的东西
您应该阅读Base64 Wiki
实现可能对用于的字母表有一些限制 代表一些位模式。这显然涉及最后两个 索引62和63的索引表中使用的字符和 用于填充的字符(在某些协议中可能是强制性的, 或在其他人中删除)
有几个实现和RFC,请注意变体汇总表
由于您无法向我们提供输入,我们不知道它是什么变体
如果输入是正确的长度,那么替换变体字符可能同样容易,再次无法知道因为无法看到输入
string corrected = input.Replace('-', '+').Replace('_', '/');
var decodedBytes = System.Convert.FromBase64String(corrected);