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

如何正确编解码含NBSP等特殊字符的字符串及优化负载大小?

解决方案

一、修复服务端解码逻辑

你当前的服务端仅完成了Base64解码,得到的是encodeURIComponent处理后的URI编码字符串,必须补充URL解码步骤才能还原NBSP等特殊字符。

修改后的C#代码:

using System;
using System.Text;
using System.Net;

public string DecodeOriginalString(string value)
{
    // 第一步:Base64解码
    var base64DecodedBytes = Convert.FromBase64String(value);
    // 第二步:将字节转成URI编码格式的字符串
    var uriEncodedStr = Encoding.UTF8.GetString(base64DecodedBytes);
    // 第三步:URL解码还原原始字符(包括NBSP)
    return WebUtility.UrlDecode(uriEncodedStr);
}

执行后,SELECT%C2%A0a%C2%A0FROM%C2%A0b会被正确解码为带NBSP的原始字符串。

二、更高效的负载压缩方案(低优先级)

原客户端流程encodeURIComponent → btoa会额外增加字符长度(比如NBSP被转成%C2%A0再Base64),可以直接对字符串的UTF-8字节做Base64编码,跳过URI编码步骤——Base64本身就能安全传输所有字节,不会触发Cloudflare等过滤器拦截,同时压缩效果更好。

客户端修改代码:

// 将字符串转为UTF-8字节数组
const encoder = new TextEncoder();
const utf8Bytes = encoder.encode("SELECT\xa0a\xa0FROM\xa0b"); // \xa0代表NBSP
// 将字节数组转为Base64字符串
const encoded = btoa(String.fromCharCode(...utf8Bytes));

对应服务端简化代码:

public string DecodeOptimizedString(string value)
{
    var base64DecodedBytes = Convert.FromBase64String(value);
    // 直接将Base64解码后的字节转成UTF-8字符串,无需URL解码
    return Encoding.UTF8.GetString(base64DecodedBytes);
}

这种方式能有效减小负载大小,同时完全保留原始字符串的结构与特殊字符。

内容的提问来源于stack exchange,提问作者Shahar Shokrani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 18:15:18