【问题标题】:c# Save korean string to file, not utf form string [duplicate]c#将韩文字符串保存到文件,而不是utf格式的字符串[重复]
【发布时间】:2021-04-30 09:39:53
【问题描述】:

有一个类,Data。 数据有一个成员“name”,其中包含韩文字符串。

我用 System.Text.Json 制作 json 字符串

JsonSerializer.Serialize<Data>(data, opt);

制作json文件

File.WriteAllText(filePath, jsonstring, Encoding.UTF8);

json的一部分是

“名称”:“\uC0BC\uC131\uC804\uAE30”,

但是我想要的是Json字符串

"姓名": "삼성전기",

我试过了

File.WriteAllText(filePath, jsonstring, Encoding.Unicode)
File.WriteAllText(filePath, jsonstring, Encoding.Default)

但是文件的内容是这种格式\uxxxx。

如何将韩文字符串原样保存到文件中?

(作为参考) 当我尝试找到解决方案(对于 C#)时,我在 Python 中找到了函数(json.dumps) 使用它就能得到我想要的结果

(示例)

import json
dict = {'555': '123'}
with open('file.txt', 'w', encoding='UTF-8') as file:
file.write(json.dumps(dict))

【问题讨论】:

  • jsonstring 的值是多少?如果jsonstring 包含"name": "\uC0BC\uC131\uC804\uAE30",那么这就是字符串包含的内容,并且它将始终包含。你如何编码那无关紧要;然后真正的问题后退一步:如何让JsonSerializer 不逃避这些价值观。你能展示产生jsonstring的代码吗?注意:这可能归结为设置opt.Encoder = ...(对某事)
  • 看起来像 dotnet core System.Text.Json unescape unicode string 的副本,同意吗?

标签: c# json system.text.json


【解决方案1】:

您可能想要的是 - 一开始就

opt.Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping;

(显然不要经常改变它——只设置一次;如果不同的用法需要不同的选项:使用不同的选项对象)

这使Name 未转义,而不是在 JSON 中转义它从那里,您可以以任何您喜欢的方式对string 进行编码。

您还应该注意,名称 UnsafeRelaxedJsonEscaping 表明可能存在不希望出现这种情况的情况,因此:值得尝试使用 read the documentation on UnsafeRelaxedJsonEscaping 来了解何时以及为什么会出现这种情况 .

【讨论】:

    猜你喜欢
    • 2016-07-10
    • 1970-01-01
    • 1970-01-01
    • 2012-02-03
    • 2018-09-15
    • 2012-03-26
    • 2014-07-01
    • 1970-01-01
    相关资源
    最近更新 更多