You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用System.Text.Json序列化写入文件丢失波兰语变音符号求助

解决System.Text.Json序列化写入文件丢失波兰语变音符号的问题

直接使用JsonSerializer内置的文件序列化方法(推荐)

最简单的方式是跳过手动处理StreamWriter,直接用System.Text.Json.JsonSerializer.SerializeToFile方法,它默认使用UTF-8编码,能正确保留所有Unicode字符:

// 基础用法
System.Text.Json.JsonSerializer.SerializeToFile(paginatedData, filePath);

// 如果需要保留原字符(避免转义成\uXXXX格式),添加配置选项
var options = new JsonSerializerOptions
{
    Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping
};
System.Text.Json.JsonSerializer.SerializeToFile(paginatedData, filePath, options);

手动处理流时的正确配置

如果必须保留原有的流操作逻辑,需要同时修复序列化和写入两个环节的配置:

  1. 序列化时禁用Unicode字符转义,确保波兰语变音符号以原字符形式保存
  2. 使用UTF-8编码写入文件(避免系统默认ANSI编码或UTF-16导致的识别问题)

修改后的代码如下:

var options = new JsonSerializerOptions
{
    Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping
};
var stringoo = System.Text.Json.JsonSerializer.Serialize(paginatedData, options);

using (var stream = new FileStream(filePath, FileMode.Create))
using (var writetext = new StreamWriter(stream, Encoding.UTF8))
{
    writetext.Write(stringoo);
}

问题原因分析

你遇到的问题大概率是以下两种情况之一:

  • 序列化转义:默认情况下System.Text.Json会将非ASCII字符转义为\uXXXX格式(比如ą变成\u0105),虽然JSON解析器能正确识别,但普通文本编辑器打开时会显示转义码而非原字符,看起来像是符号丢失。
  • 写入编码错误:你之前尝试的Encoding.Unicode是UTF-16编码,部分JSON工具或文本编辑器默认以UTF-8读取文件,会导致乱码;而默认StreamWriter使用的系统ANSI编码不支持所有Unicode字符,直接写入会丢失变音符号。

后续排查方向

  • 用VS Code等编辑器打开生成的JSON文件,查看右下角显示的文件编码,确认是UTF-8。
  • 检查JSON内容:如果看到\uXXXX格式的转义序列,说明是序列化配置问题;如果是问号或乱码,说明是写入时的编码问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 14:28:26