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

如何解决C# StreamWriter将字符串中'+'替换为空格的问题

解决POST请求中+字符被替换为空格的问题

嘿,这个问题我之前也踩过坑!原因很明确:你设置了ContentType = "application/x-www-form-urlencoded",而在这种表单编码规则里,+是被用来表示空格的——所以当请求内容被解析时,所有的+都会被自动替换成空格。

要保留+字符,你需要对包含+的变量做URL编码,把+转换成它对应的URL编码值%2B。这样服务器端解析的时候,就会把%2B还原回+,而不会当成空格处理。

具体怎么做呢?看下面的步骤:

  • 如果你用的是.NET Framework,先引用System.Web命名空间,然后用HttpUtility.UrlEncode()方法对headerVar进行编码;
  • 如果是.NET Core/.NET 5及以上版本,直接用WebUtility.UrlEncode()(属于System.Net命名空间,无需额外引用);
  • 另外注意你代码里的&是HTML实体,在表单参数里直接用&分隔参数就好,不用转义。

修改后的代码示例:

string headerVar = "W1wb948yHwyItOPOKC9P3+VPzQfVbP09yvY+X0";

public void Sorgula(string variable) {
    Application.DoEvents();
    var request = (HttpWebRequest)WebRequest.Create("sample.com.tr?sID=" + variable);
    request.Headers.Add("X-Requested-With", "XMLHttpRequest");
    request.CookieContainer = CookieJar;
    
    // 对headerVar进行URL编码,将+转为%2B
    string encodedHeaderVar = HttpUtility.UrlEncode(headerVar);
    // .NET Core/.NET 5+ 替换为:string encodedHeaderVar = WebUtility.UrlEncode(headerVar);
    
    // 拼接请求内容,用&分隔参数
    string header = $"__HEADERVARIABLE={encodedHeaderVar}&OTHERHEADERVAR={otherVar}";
    
    request.Method = "POST";
    request.ContentType = "application/x-www-form-urlencoded";
    using (var streamWriter = new StreamWriter(request.GetRequestStream())) {
        streamWriter.Write(header);
    }
}

这样处理后,写入请求流的内容会变成:
__HEADERVARIABLE=W1wb948yHwyItOPOKC9P3%2BVPzQfVbP09yvY%2BX0&OTHERHEADERVAR=xxx
服务器端解析时,会自动把%2B转换回+,完美保留你想要的字符!

内容的提问来源于stack exchange,提问作者Eren Salihler

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:15:51