3

所以我能够成功读取图像文件,并将其传递回我的 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%,奇怪的是在我解码之后,它仍然更大)。

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

4

1 回答 1

10

我在这里错过了一些疯狂的简单吗?

是的。图像不是文本文件,因此您不应该使用File.WriteAllText. 您认为图像文件中存在哪些字符?区分数据基本上是文本和二进制数据是非常非常重要的。如果你试图把其中一个当作另一个,你就是在自找麻烦。

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

File.WriteAllBytes(path, Convert.FromBase64String(data));
于 2012-05-02T20:25:08.913 回答