如何解决JsonSerializing序列化塞尔维亚语特殊字符的异常问题
解决JsonSerialize序列化塞尔维亚语字符时的乱码问题
嘿,我碰到过类似的特殊字符序列化坑,你的情况明显是UTF-8特殊字符被错误转义成了控制字符——比如Ž变成}\u0001,ć变成\u0007\u0001,大概率是序列化配置或编码处理环节出了问题。给你几个可行的解决方向:
1. 修正Json.NET序列化配置
默认情况下Newtonsoft.Json是支持UTF-8特殊字符的,但咱们可以把配置写得更明确,避免不必要的转义逻辑干扰。试试调整JsonSerializerSettings:
JsonSerializerSettings settings = new JsonSerializerSettings() { Culture = new CultureInfo("sr-Latn-CS"), // 只转义JSON规范要求的字符,保留UTF-8特殊字符 StringEscapeHandling = StringEscapeHandling.Default, // 明确指定编码为UTF-8,避免系统默认编码干扰 Encoding = Encoding.UTF8, // 关闭HTML转义,防止特殊字符被错误处理 HtmlEncode = false }; json = JsonConvert.SerializeObject(root, settings);
2. 先验证原始数据的正确性
有时候问题根源在数据源本身——你得先确认root.SMSFlowMessages里的MessageText原始值是正常的。可以在序列化前加一段日志输出,看看Željko Cvijetić是否没被损坏:
foreach (var msg in root.SMSFlowMessages) { log.append($"原始消息文本: {msg.MessageText}", logdir); }
3. 确认日志/输出环节的编码支持
有可能序列化后的JSON本身是正确的,但你的日志系统不支持UTF-8,导致显示出来是乱码。可以在发送前把JSON写入本地文件验证:
File.WriteAllText("debug_sms.json", json, Encoding.UTF8);
用支持UTF-8的编辑器(比如VS Code)打开这个文件,看看塞尔维亚语字符是否正常显示。
4. 检查服务器端的编码解析
你用new StringContent(json, Encoding.UTF8, "application/json")这部分是对的,但要确保服务器端也配置了正确解析UTF-8编码的请求头。如果服务器默认用其他编码,也可能导致接收后乱码。
按这个顺序排查下来,应该能解决你的字符转换异常问题。我之前就是通过调整序列化的转义设置,搞定了类似的东欧语言字符问题。
内容的提问来源于stack exchange,提问作者saulyasar
相关产品推荐
相关产品推荐

