我需要一个解码base64的建议。我将在c#中完成它。
问题是,我不知道解码将输出什么类型的格式,它可能是文本,XML,图像或PDF。我只有base64编码的字符串。
你们怎么建议我继续?有什么建议?
许多图像类型和pdf都包含一个幻数,其中前X个字节标识文件类型。您应解码字符串并检查这些字符串(https://asecuritysite.com/forensics/magic给出它们的列表)。如果仍然无法识别它,请检查它是否使用XML解析器解析为XML,否则假定它是文本。
从base64字符串中提取MIME类型:
/**
* Extract the MIME type from a base64 string
* @param encoded Base64 string
* @return MIME type string
*/
private static String extractMimeType(final String encoded) {
final Pattern mime = Pattern.compile("^data:([a-zA-Z0-9]+/[a-zA-Z0-9]+).*,.*");
final Matcher matcher = mime.matcher(encoded);
if (!matcher.find())
return "";
return matcher.group(1).toLowerCase();
}
用法:
final String encoded = "data:image/png;base64,iVBORw0KGgoAA...5CYII=";
extractMimeType(encoded); // "image/png"
extractMimeType("garbage"); // ""
然后你可以编写你的字节数组:
var filePath = System.IO.Path.Combine(folderPath, string.Format("pdf_{0}.pdf", Guid.NewGuid()));
var byteArray = Convert.FromBase64String(base64pdf);
File.WriteAllBytes(filePath, byteArray);
并打开你的文件:
Device.OpenUri(new Uri("file://" + filePath));
或者将数据标记化,因为64位编码数据看起来像这个“data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoAAAAKAC
”并解析该字符串。