【发布时间】:2021-05-21 17:56:14
【问题描述】:
我有一个base64解码器的任务。如您所知,base64 不包含任何有关源文件名的信息,但前 5 个符号确实包含有关文件类型的信息。我已经有一个从 base64 字符串返回类型的函数。在这里。
string GetFileTypeByBase64(string base64)
{
var data = base64.Substring(0, 5);
switch (data.ToUpper())
{
case "IVBOR":
return ".png";
case "/9J/4":
return ".jpg";
case "AAAAI":
return ".mp4";
case "JVBER":
return ".pdf";
case "AAABA":
return ".ico";
case "UMFYI":
return ".rar";
case "E1XYD":
return ".rtf";
case "U1PKC":
return ".txt";
case "MQOWM":
case "77U/M":
return ".srt";
default:
return "." + data;
}
}
这是我的问题:我如何知道 base64 字符串中的文件是 mp3 还是 wav? (如果您提供其他文件类型的标志也将不胜感激)
【问题讨论】:
-
但前 5 个符号确实包含有关文件类型的信息 - 这只是对了一半。实际上,base64 确实只包含原始文件的编码字节,并且没有自己的 header。许多文件格式都有一个文件头,通常以某个字节序列开头,因此 base64 编码的字符串也以某个序列开头。例如。每个 base64 编码的 png 都以“iVBOR”开头。另请参阅my answer here。
-
当你理解了这一点后,你就可以很容易地找到每个带有固定标题的文件类型。要么在 google 上快速搜索一下文件格式,要么只编码几个相同类型的文件,看看结果是否总是以相同的字符开头。