如何在JavaScript中正确解码location.pathname中的非ASCII字符
问题原因
unescape 是已被废弃的旧标准函数,仅支持单字节的Latin-1编码解析。你遇到的%C3%BC是字符ü的UTF-8编码百分号转义结果,unescape会把两个字节分别解析为Latin-1字符,因此得到乱码ü。
正确解法
使用JavaScript标准提供的decodeURIComponent()方法解码即可,该方法原生支持UTF-8编码的URI组件解析:
// 直接对location.pathname解码 const originalPath = decodeURIComponent(location.pathname); // 输出结果:/search/city/Germany:Baden-Württemberg
补充说明
如果你需要解码的是完整URL而非仅路径部分,也可以使用decodeURI()方法,二者的区别是decodeURI()不会解码URL中属于保留字的特殊字符(比如/、:、?等),但在你这个路径解码的场景下,两个方法都可以得到正确结果。
内容的提问来源于stack exchange,提问作者Hairi
相关产品推荐
相关产品推荐

