Javascript 为什么unescape可以工作而decodeURI不能';T

Javascript 为什么unescape可以工作而decodeURI不能';T,javascript,Javascript,我有以下变量: var string="Mazatl%E1n"; 服务器返回的字符串与此类似。我只想把它解码成:Mazatlán。我尝试了以下方法: var string="Mazatl%E1n"; alert(unescape(string)); alert(decodeURI(string)); unescape工作正常,但我不想使用它,因为我知道它是,相反,我尝试decodeURI wich失败,出现以下错误: 未捕获的URI错误:URI格式错误 为什么??感谢您的帮助 var s

我有以下变量:

var string="Mazatl%E1n";
服务器返回的字符串与此类似。我只想把它解码成:
Mazatlán
。我尝试了以下方法:

var string="Mazatl%E1n";

alert(unescape(string));
alert(decodeURI(string));
unescape工作正常,但我不想使用它,因为我知道它是,相反,我尝试decodeURI wich失败,出现以下错误:

未捕获的URI错误:URI格式错误

为什么??感谢您的帮助

var string=“Mazatl%E1n”;
警报(unescape(字符串));

警报(解码URI(字符串))函数需要一个有效的URI作为其参数。如果您只是尝试解码字符串而不是完整的URI,请使用

URI支持ASCII字符集,
的正确格式编码是
%C3%A1
(UTF-8编码)


和unescape使用十六进制转义序列
(这是不同的……)

因此,您从服务器获取的值已使用
escape(string)

进行了编码,因为
%E1
是Unicode编码,但
decodeURI()
需要UTF-8

您必须创建自己的unescape函数,例如:

函数UnicodeCape(字符串){
返回字符串.replace(/%u([\dA-Z]{4})|%([\dA-Z]{2})/g,函数(Z,m1,m2){
返回字符串.fromCharCode(parseInt(“0x”+(m1 | | m2));
})
}
var string=“Mazatl%E1n”;

document.body.innerHTML=unicodeUnEscape(字符串)查找…
escape()
unescape()
是为ISO字符串定义的
decodeURI()
encodeURI()
是为UTF-8字符串定义的。@JohanKarlsson的方向正确。%E1是Unicode编码,但URI使用UTF-8,因此正确的编码是%C3%A1。通过运行
encodeURIComponent(“Mazatlán”)
可以看到这一点。您是否可以记录正则表达式?它匹配一个
%
,后跟
u
和4个十六进制数字,或者
%
后跟2个十六进制数字:我建议@johankarsson在正则表达式的g后面添加一个I(不敏感),因为%2f和%2f都是有效的编码