如何正确编码(客户端)和解码(服务器)包含特殊字符(例如不间断空格)的字符串?

问题描述 投票:0回答:1

我需要通过 Cloudflare 等安全过滤器安全传输可能包含不间断空格(NBSP、Unicode U+00A0)的字符串。 此外,我正在寻找一种可能减少有效负载大小以提高效率的方法。 挑战是确保这些字符串不会失去其原始结构。

这是客户:

var encoded = window.btoa(encodeURIComponent("SELECT a FROM b"));
//U0VMRUNUJUMyJUEwYSVDMiVBMEZST00lQzIlQTBi

实际上“SELECT a FROM b”是“SELECT

NBSF
a
NBSF
FROM
NBSF
b”。

服务器端代码重现此字符串:

SELECT%C2%A0a%C2%A0FROM%C2%A0b
而最终的应该字符串应相同“SELECT a FROM b”。

var valueBytes = Convert.FromBase64String(value);
return Encoding.UTF8.GetString(valueBytes);

如何修改服务器端代码以将百分比编码的 NBSP(以及可能的其他字符)正确解码回原始形式? 有没有更有效的方法来减少有效负载大小? (这个不太重要)

javascript c# encoding
1个回答
0
投票

解决了

Uri.UnescapeDataString

var valueBytes = Convert.FromBase64String(value);
var decodedString = Encoding.UTF8.GetString(valueBytes);
return Uri.UnescapeDataString(decodedString);
© www.soinside.com 2019 - 2024. All rights reserved.