Node.js cookie-parser returns 编码字符

Node.js cookie-parser returns encoded characters

我正在使用 cookie-parser 为用户提供一个签名的 cookie,但我在手动解码它们时遇到了问题。服务器 returns 带有隐藏十六进制代码的 cookie(我猜?)。示例:

app.use(cookieParser('bar'));
...
res.cookie('nickname', 'foo', { signed: true });

然后我有一个带有奇怪 %3A 个字符 nickname=s%3Afoo.FHkzIYqqvAuLEKKzpcNGhMjZQ0G88QpHNtxycPd0GFE 的 cookie,我无法解码它

cookieParser.signedCookie('s%3Afoo.FHkzIYqqvAuLEKKzpcNGhMjZQ0G88QpHNtxycPd0GFE', 'bar')

returns 相同的字符串。当我将 %3A 更改为 :(十六进制编码?),如

cookieParser.signedCookie('s:foo.FHkzIYqqvAuLEKKzpcNGhMjZQ0G88QpHNtxycPd0GFE', 'bar')

我得到了 foo - 正确的值。有谁知道如何自动处理它?非常感谢您的帮助。

您返回的字符串是 urlencoded ( RFC 3986 ) 这意味着您需要对其进行解码才能正常使用它。 (注意:维基百科将此列为 'Percent Encoding'

JavaScript中的解码命令改为unescape however as of JavaScript 1.5, this command is deprecated and you should use decodeURI or decodeURIComponent

使用这些命令的语法如下:

unescape

   var foo = "Hello%20World"; // encoded string
   var bar = unescape("Hello%20World");
   console.log(bar);

解码URI

   var foo = "Hello%20World"; // encoded string
   var bar = decodeURI("Hello%20World");
   console.log(bar);

decodeURIComponent

   var foo = "Hello%20World"; // encoded string
   var bar = decodeURIComponent("Hello%20World");
   console.log(bar);

以下图表来自w3schools.com

Windows-1252 和 UTF-8 编码参考

ASCII 控制字符编码参考