You need to enable JavaScript to run this app. C# 使用System.Text.Json序列化韩文写入文件时如何输出原生韩文而非Unicode转义字符
优惠活动
大模型
产品
解决方案
定价
更多

C# 使用System.Text.Json序列化韩文写入文件时如何输出原生韩文而非Unicode转义字符

问题根源

韩文字符被转义为\uXXXX格式是System.Text.Json序列化阶段的默认行为,和后续写入文件的编码设置无关。你调整Encoding.Unicode、Encoding.Default不生效,是因为序列化生成的jsonstring本身就已经是转义后的ASCII内容,换什么写入编码都不会把转义片段还原成原生韩文。

解决方法

只需要修改代码中传入的JsonSerializerOptions(即代码里的opt参数)配置,从序列化源头关闭非ASCII字符的转义,核心逻辑如下:

// 需引入命名空间:System.Text.Encodings.Web、System.Text.Unicode
var opt = new JsonSerializerOptions
{
    // 核心配置:指定编码器允许所有Unicode字符直接输出,不做转义
    Encoder = JavaScriptEncoder.Create(UnicodeRanges.All),
    // 可选配置:根据需要是否开启JSON缩进格式化
    WriteIndented = true
};

// 后续原有逻辑保持不变即可
string jsonstring = JsonSerializer.Serialize<Data>(data, opt);
File.WriteAllText(filePath, jsonstring, Encoding.UTF8);

上述使用的JavaScriptEncoder、UnicodeRanges类型在.NET Core 3.0及以上、.NET 5+框架中为内置组件,无需额外安装第三方Nuget包。

注意事项
  • 不需要修改写入文件的编码设置,继续使用Encoding.UTF8即可:只要序列化阶段输出的是原生韩文字符,UTF8编码写入的文件可以被所有文本编辑器正常识别,还能比转义格式的JSON节省约60%的非ASCII字符对应的文件体积。
  • 不推荐直接使用内置的JavaScriptEncoder.UnsafeRelaxedJsonEscaping来实现不转义:这个宽松编码器会跳过对<、>、&等特殊HTML字符的转义,如果序列化的JSON内容会被直接嵌入HTML页面执行,存在XSS安全风险,优先用指定Unicode范围的编码器更安全。
  • 该配置和Python中json.dumps(ensure_ascii=False)的效果完全对等:Python的json库默认也是将非ASCII字符转义为\uXXXX格式,只有显式设置ensure_ascii=False才会输出原生的非ASCII文本,和C# System.Text.Json的默认行为逻辑一致。

内容的提问来源于stack exchange,提问作者user2523112

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.06 16:36:04