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 に答える