【发布时间】:2022-01-19 20:21:15
【问题描述】:
在 C# .net 核心环境中,使用 System.Text.Json unicode 字符进行替换。例如“ü”在将json文件读入一个对象列表后显示为另一个符号
Passwort zurücksetzen
变成
Passwort zur�cksetzen
我尝试设置 json 选项:
JsonSerializerOptions jso = new JsonSerializerOptions();
jso.Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping;
this.messageTemplates =
JsonSerializer.Deserialize<List<MessageTemplate>>(messageTemplateJsonData, jso);
这并没有改变行为。
有什么想法吗?
更新:问题已解决
正如 diogoaos 所怀疑的那样,问题不会发生在 json 反序列化器中,而是在从文件中读取 json 文档时预先发生的。所以解决方案是将文件保存为 utf-8 并为文件阅读器设置编码:
string messageTemplateJsonData = File.ReadAllText(messageTemplatesFilename, System.Text.ASCIIEncoding.UTF8);
JsonSerializerOptions jso = new JsonSerializerOptions();
jso.Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping;
this.messageTemplates = JsonSerializer.Deserialize<List<MessageTemplate>>(messageTemplateJsonData, jso);
【问题讨论】:
-
您如何显示您的数据?您有非 ASCII Unicode 字符,只有当您的 UI 或控制台设置为正确的字符集时才能显示。
-
我将数据打印到控制台。但是控制台通常会显示一个“ü”
-
您在另一台计算机上吗?您是否更改了代码页?如果您使用的代码页没有“ü”,那么您会看到。文件是以 Unicode 格式存储的,还是只是假设一种编码?
标签: c# unicode system.text.json