将 json 从 python 导出到 C# 文件编码问题
Export json from python to C# file encoding issue
我有一个 python 脚本,它生成一个 json 文件,进一步用于 C# 应用程序。这是创建导出的代码:
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
在每个换行符处包含字符 \r\n
,并且无法反序列化 json。
我试图检查 python 脚本生成的编码,根据 SublimeText 的说法是 u'Undefined'
如何使 python 为 C# 正确编码文件或使 C# 使用正确的编码加载文件?
我想发生的事情是你在 Windows 系统上,python 脚本的 open
命令自动使换行符以 \r\n
结尾,并且C# reader 不需要它们。
解决此问题的一种方法是将文件写入二进制而不是文本:
def put(data, filename):
with open(filename, 'wb') as outfile:
outfile.write(json.dumps(data, indent=4, ensure_ascii=False).encode("utf-8"))
然而,在使用 indent
时,问题也可能在 JSON
库本身内部,这可以通过删除参数来解决(但我假设你想要它是有原因的)或生成后编辑 JSON
字符串,并在写入文件之前将 /r/n
替换为 /n
。
我有一个 python 脚本,它生成一个 json 文件,进一步用于 C# 应用程序。这是创建导出的代码:
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
在每个换行符处包含字符 \r\n
,并且无法反序列化 json。
我试图检查 python 脚本生成的编码,根据 SublimeText 的说法是 u'Undefined'
如何使 python 为 C# 正确编码文件或使 C# 使用正确的编码加载文件?
我想发生的事情是你在 Windows 系统上,python 脚本的 open
命令自动使换行符以 \r\n
结尾,并且C# reader 不需要它们。
解决此问题的一种方法是将文件写入二进制而不是文本:
def put(data, filename):
with open(filename, 'wb') as outfile:
outfile.write(json.dumps(data, indent=4, ensure_ascii=False).encode("utf-8"))
然而,在使用 indent
时,问题也可能在 JSON
库本身内部,这可以通过删除参数来解决(但我假设你想要它是有原因的)或生成后编辑 JSON
字符串,并在写入文件之前将 /r/n
替换为 /n
。