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

Angular与C#间Base64编解码特殊字符问题求助

解决Angular与C#间Base64编码解码乱码问题

问题原因

window.btoa API仅支持ASCII字符集,对于非ASCII字符(比如示例中的é),它会按**ISO-8859-1(Latin1)**编码为单字节(é对应0xE9),但C#端用UTF8.GetString解码时,0xE9不是有效的UTF-8编码(UTF-8中é需要两个字节0xC3 0xA9),因此出现乱码。

解决方案

方案一:修改Angular端编码逻辑(推荐)

将字符串先转为UTF-8字节序列,再进行Base64编码,确保两端编码规则一致:

// 自定义UTF-8转Base64函数
function utf8ToBase64(str: string): string {
  const encoder = new TextEncoder();
  const utf8Bytes = encoder.encode(str);
  const binaryStr = String.fromCharCode(...utf8Bytes);
  return window.btoa(binaryStr);
}

// 使用示例
let encodedText = utf8ToBase64("demoé"); // 编码结果为 ZGVtb+Oq=

方案二:修改C#端解码逻辑(兼容旧编码)

如果无法改动前端代码,C#端可改用ISO-8859-1编码解码:

string encodedText = "ZGVtb+k=";
byte[] data = Convert.FromBase64String(encodedText);
// 使用ISO-8859-1编码解码
string decodedString = Encoding.GetEncoding("ISO-8859-1").GetString(data); // 正确得到 demoé

验证说明

  • 方案一编码后的Base64字符串ZGVtb+Oq=,在C#用UTF8.GetString解码可直接得到正确结果demoé。
  • 方案二无需修改前端代码,直接适配旧编码逻辑即可解决乱码问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 19:14:51