我在Chrome的控制台中输入了以下内容:
decodeURIComponent('a%AFc');
它没有导致a0xAFc
,而是导致了URIError异常(uri格式错误)。
我听过几个借口,为什么这可能是可能的,但我不明白的是为什么?
decodeURIComponent()
函数尤其应该对数据进行解码,而不是验证URI。
- 维基百科:百分比编码
- RFC3986:URI通用语法(2005)
%AF
本身不是一个字符,而是Unicode序列(MACRON - %C2%AF
)的一部分。
%AF
不是由encodeURIComponent
产生的,而是类似于escape
的,所以它可以由unescape
解码。
您可能需要的是decodeURIComponent('%C2%AF')
这可能适用于也可能不适用于其他人的情况,但这就是我的原因,所以我想我会分享。我上传和下载许多文本文件到一个自定义的CMS
源代码中的"%"符号对我造成了严重破坏。
// send to server
content = content.toString().replace(/%/g,'~~pct~~'); // ~~pct~~ <-made up replacement
content = encodeURI(content);
// get back from server / database
content = decodeURI(content);
content = content.toString().replace(/~~pct~~/g,'%'); // globally restore '%'