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

为何C#与Java对同一内容生成的Base64编码结果不同?

问题原因及解决方案

核心差异:JSON序列化的斜杠转义行为不同

问题本质是两边JSON序列化时对斜杠/的处理规则不一致,导致生成的UTF-8字节数组不同,最终Base64编码结果出现差异:

  • Java的JSONObject(通常为org.json库)默认会将字符串中的斜杠/转义为\/,生成的JSON字符串为:
    {"partnerUrl":"https:\/\/test.com\/testapp\/abc\/signup"}
    
  • C#的System.Text.Json.JsonSerializer默认不转义斜杠/,生成的JSON字符串为:
    {"partnerUrl":"https://test.com/testapp/abc/signup"}
    

这两个JSON语义完全等价(JSON规范允许斜杠转义或不转义),但对应的UTF-8字节数组存在差异,因此Base64编码结果自然不同。

让C#生成与Java一致的Base64编码

要让C#输出和Java相同的Base64结果,只需修改JsonSerializer的配置,强制开启斜杠转义:

using System.Text.Json;
using System.Text.Encodings.Web;

var data = new Dictionary<string, string>
{
    {"partnerUrl", "https://test.com/testapp/abc/signup"}
};

// 配置编码器,开启斜杠转义规则
var options = new JsonSerializerOptions
{
    Encoder = JavaScriptEncoder.Create(UnicodeRanges.All, JavaScriptEncoder.DefaultSettings.AllowEscapedSlashes)
};

string jsonString = JsonSerializer.Serialize(data, options);
byte[] utf8Bytes = System.Text.Encoding.UTF8.GetBytes(jsonString);
string base64Result = Convert.ToBase64String(utf8Bytes);

修改后生成的JSON字符串会包含转义后的斜杠,最终Base64编码结果将与Java端完全一致。

内容的提问来源于stack exchange,提问作者Fazla Elahi Md Jubayer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 22:13:17