C#上传JSON文件至Azure Blob Storage出现特殊字符的原因?
Azure Blob存储JSON文件特殊字符转义问题解决
问题现象
- 程序通过Put请求更新Azure Blob Storage中的JSON文件后,使用Azure UI下载文件时,特殊字符(如重音
ó)显示为Unicode转义序列\u00F3(示例:Zona de especial protecci\u00F3n)。 - 使用Postman发起Get请求获取该文件时,特殊字符显示正常。
- 核心代码片段:
SemanticDictionaryContent semanticDictionaryContent = new SemanticDictionaryContent() { Name = entity.Id + JSON_EXTENSION, Content = BinaryData.FromObjectAsJson(entity) };
问题原因
BinaryData.FromObjectAsJson默认使用的.NET JSON序列化器会将非ASCII字符转义为Unicode序列(\uXXXX格式)。Postman在解析JSON时会自动处理这些转义序列,还原为原始字符;但Azure UI下载时直接输出序列化后的原始文本,未做转义解析,导致显示异常。
解决方案
修改JSON序列化配置,禁用非ASCII字符的转义行为,具体步骤如下:
- 引入
System.Text.Encodings.Web命名空间(需确保项目已引用该程序集)。 - 创建
JsonSerializerOptions实例,设置Encoder为JavaScriptEncoder.UnsafeRelaxedJsonEscaping。 - 将配置传入
FromObjectAsJson方法。
修改后的代码:
using System.Text.Encodings.Web; using System.Text.Json; // ... var jsonOptions = new JsonSerializerOptions { Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping, // 可选:开启格式化输出,让JSON更易读 WriteIndented = true }; SemanticDictionaryContent semanticDictionaryContent = new SemanticDictionaryContent() { Name = entity.Id + JSON_EXTENSION, Content = BinaryData.FromObjectAsJson(entity, jsonOptions) };
说明
JavaScriptEncoder.UnsafeRelaxedJsonEscaping允许序列化器直接输出Unicode字符,而非转义为\uXXXX格式,完全符合JSON规范。- 此配置不会影响JSON的解析兼容性,Postman、代码等各类JSON解析工具仍能正常处理文件内容。
内容的提问来源于stack exchange,提问作者agmcoder
相关产品推荐
相关产品推荐

