从基于 JSON/PHP 的映像解释 C# 中的 base 64 (base64_encode)
本文关键字:base 中的 base64 encode 解释 JSON PHP 映像 | 更新日期: 2023-09-27 18:32:53
所以我能够成功读取图像文件,并将其传递回我的 C# 应用程序,但我无法正确解码它。
我通过 PHP 返回这样的 JSON 数据(未显示json_encode函数):
$imgbinary = fread(fopen($filename, "r"), filesize($filename));
if ( strlen($imgbinary) > 0 ){
return array("success"=>true, "map"=>base64_encode($imgbinary));
}
然后在 C# 中,我使用 Newtonsoft.Json 解码字符串(我可以成功读取成功和映射属性),但我无法使用 base64 解码将图像正确写入文件(或显示)。
我是这样做的:
File.WriteAllText(System.Windows.Forms.Application.StartupPath + "''MyDir''" + FileName, Base64Decode(FileData));
public string Base64Decode(string data)
{
byte[] binary = Convert.FromBase64String(data);
return Encoding.Default.GetString(binary);
}
我在这里错过了一些疯狂简单的东西吗? 真正奇怪的是,在我解码数据后,文件大小比原始文件大。 (我意识到一旦你编码,数据就会增加大约 33%,只是奇怪的是,在我解码之后,它仍然更大)。
任何帮助/指示将不胜感激!
我在这里错过了一些疯狂简单的东西吗?
是的。图像不是文本文件,因此不应使用 File.WriteAllText
。您认为图像文件中存在哪些字符?区分数据何时基本上是文本,何时基本上是二进制的,这真的非常重要。如果你试图把其中一个当作另一个来对待,你就是在自找麻烦。
不要从字节数组转换回文本(您的Encoding.Default.GetString
调用将丢失数据) - 只需使用:
File.WriteAllBytes(path, Convert.FromBase64String(data));