0

C#アプリケーションでさらに使用されるjsonファイルを生成するpythonスクリプトがあります。これは、エクスポートを作成するコードです。

def put(data, filename):
    with open(filename, 'w') as outfile:
        json.dump(data, outfile, indent=4, ensure_ascii=False, encoding='utf8')

次に、C# アプリケーションで次のように読み込もうとします。

public static string readFile(string filename)
{
    using (StreamReader r = new StreamReader(filename))
    {
        return r.ReadToEnd();
    }
}

//different file
string json_result = funcs.readFile(out_file);
VirtualMachine newvm = JsonConvert.DeserializeObject<MyClass>(json_result);

問題は、各改行json_resultに文字が含まれており、json のデシリアライズに失敗することです。\r\n

Pythonスクリプトによって生成されたエンコーディングを確認しようとしましたが、SublimeTextによるとu'Undefined'

Python でファイルを C# 用に正しくエンコードしたり、C# で正しいエンコードでロードしたりするにはどうすればよいですか?

4

1 に答える 1

1

私が想像しているのは、あなたがWindowsシステムを使用していて、pythonスクリプトのopenコマンドが自動的に改行を終了させて\r\n​​おり、C#リーダーがそれらを期待していないということです。

これを修正する 1 つの方法は、テキストではなくバイナリとしてファイルに書き込むことです。

def put(data, filename):
    with open(filename, 'wb') as outfile:
        outfile.write(json.dumps(data, indent=4, ensure_ascii=False).encode("utf-8"))

ただし、この問題は、JSONを使用しているときにライブラリ自体の内部でもindent発生する可能性があります。これは、引数を削除するか (ただし、何らかの理由でかなり必要だと思います)、生成後に文字列を編集し、に書き込む前にJSON文字列を置換/r/nすることで修正できます。/nファイル。

于 2015-08-27T14:31:19.597 に答える