2012-05-02 33 views
3

所以我能够成功地读取图像文件,并将其传递回我的C#应用​​程序,但我不能给它适当地解码基于图像解读C#基地64。从通过JSON/PHP(BASE64_ENCODE)

我通过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到串进行解码(I可以读取成功和成功的地图属性),但我无法再使用的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%,奇怪的是,我解码后,它仍然更大)。

任何帮助/指针将不胜感激!

+0

您是否获得一个例外? – xxpor

+0

不要将它作为TEXT文件写入,而是通过将字节数组直接保存到文件中(不要执行Encoding.Default.GetString) – Quintium

回答

9

我失去了一些疯狂简单吗?

是的。图像不是一个文本文件,所以你不应该使用File.WriteAllText。你相信什么字符出现在一个图像文件?区分数据何时基本上是文本,什么时候基本是二进制,真的非常重要。如果你试图把它看作是另一个,那么你就是在寻求麻烦。

不要从字节数组转换为文本(您Encoding.Default.GetString的通话将被丢失数据) - 只需使用:

File.WriteAllBytes(path, Convert.FromBase64String(data)); 
+0

可能的错字:“应该使用File.WriteAllText”。我认为你的意思是“不应该”:) – Quintium

+0

@Quintium:固定谢谢。现在显然是睡觉的时候了。 –