无法以正确的方式拆分 Base64 字符串
Cannot split Base64 string the correct way
我正在开发一个通过网站接收 Base64 文件的 C# 客户端。
它有时会起作用,但现在我有一个文件不起作用,因为:
假设我将其作为 Base64 字符串,并在开头添加了一些额外信息 shapered.png|data:image/png;base64,iVBORw0KGgoAAAANSUh / // EUgAAACAAAAAgCAYAblabla
然后我在 C# 代码中这样做:
var raw = base64.Split('/')[1]; //get raw data with type extention ,
var data = raw.Split(',')[1]; //get base64 data
var info = raw.Split(',')[0]; // gets type extention mp3 base64
var ext = info.Split(';')[0]; // splits header mp3 only use this for comparison against malicous file
var name = base64.Split('|')[0]; //splits name info
现在我在调试器中看到它在 ///
之后删除了所有信息
我完全没抓住要点吗?
我认为 var raw = base64.Split('/')[1] 会在 date:image/ 之后获取信息
然后 raw.Split(',')[1] 取出 png;base64 只剩下原始数据。
但它并没有,它还取出了原始变量中'/'之后的所有其余部分,导致文件损坏。
我不立即在“,”处拆分它并从那里拆分的原因是为了防止其中带有“,”的文件也能正常工作。
它完全飞到我头顶上了,对不起大家!
我以一种方式认为 [1] 也需要 "array".
的其余部分
string example = "im/noob/programmer";
Console.WriteLine(example);
string lol = example.Split('/')[1]; //this only outputs "noob"
Console.WriteLine(lol);
您正在将整个字符串切割成碎片。您使用 /
进行拆分,它会在每次出现 /
.
时断开字符串
更好的解决方案是找到斜线的位置而不是在其上拆分。
像这样:
string s1 = "shapered.png|data:image/png;base64,iVBORw0KGgoAAAANSUh /// EUgAAACAAAAAgCAYAblabla";
string name = s1.Substring(0, s1.IndexOf('|'));
string data = s1.Substring(s1.IndexOf('|') + 1);
string mimeType = data.Substring(data.IndexOf(':') + 1, data.IndexOf(';') - data.IndexOf(':') - 1);
string base64 = data.Substring(data.IndexOf(',') + 1);
或者当您习惯使用正则表达式时:
(.*?)\|data:(.*?);base64,(.*)
我正在开发一个通过网站接收 Base64 文件的 C# 客户端。
它有时会起作用,但现在我有一个文件不起作用,因为:
假设我将其作为 Base64 字符串,并在开头添加了一些额外信息 shapered.png|data:image/png;base64,iVBORw0KGgoAAAANSUh / // EUgAAACAAAAAgCAYAblabla
然后我在 C# 代码中这样做:
var raw = base64.Split('/')[1]; //get raw data with type extention ,
var data = raw.Split(',')[1]; //get base64 data
var info = raw.Split(',')[0]; // gets type extention mp3 base64
var ext = info.Split(';')[0]; // splits header mp3 only use this for comparison against malicous file
var name = base64.Split('|')[0]; //splits name info
现在我在调试器中看到它在 ///
之后删除了所有信息我完全没抓住要点吗? 我认为 var raw = base64.Split('/')[1] 会在 date:image/ 之后获取信息 然后 raw.Split(',')[1] 取出 png;base64 只剩下原始数据。
但它并没有,它还取出了原始变量中'/'之后的所有其余部分,导致文件损坏。
我不立即在“,”处拆分它并从那里拆分的原因是为了防止其中带有“,”的文件也能正常工作。
它完全飞到我头顶上了,对不起大家! 我以一种方式认为 [1] 也需要 "array".
的其余部分 string example = "im/noob/programmer";
Console.WriteLine(example);
string lol = example.Split('/')[1]; //this only outputs "noob"
Console.WriteLine(lol);
您正在将整个字符串切割成碎片。您使用 /
进行拆分,它会在每次出现 /
.
更好的解决方案是找到斜线的位置而不是在其上拆分。
像这样:
string s1 = "shapered.png|data:image/png;base64,iVBORw0KGgoAAAANSUh /// EUgAAACAAAAAgCAYAblabla";
string name = s1.Substring(0, s1.IndexOf('|'));
string data = s1.Substring(s1.IndexOf('|') + 1);
string mimeType = data.Substring(data.IndexOf(':') + 1, data.IndexOf(';') - data.IndexOf(':') - 1);
string base64 = data.Substring(data.IndexOf(',') + 1);
或者当您习惯使用正则表达式时:
(.*?)\|data:(.*?);base64,(.*)