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

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字符的转义行为,具体步骤如下:

  1. 引入System.Text.Encodings.Web命名空间(需确保项目已引用该程序集)。
  2. 创建JsonSerializerOptions实例,设置Encoder为JavaScriptEncoder.UnsafeRelaxedJsonEscaping。
  3. 将配置传入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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 15:10:28