我遇到了一个问题,遗憾的是,我还没有找到正确的解决方案:我需要解码用windows-1251(cp1251)编码的url-slice。
我知道有些方法 - decodeURI()和 decodeURIComponent(),但它们仅适用于UTF-8(据我所知)。我找到的解决方案使用了弃用的方法escape()和unescape()。
例如,有序列:
%EF%F0%EE%E3%F0%E0%EC%EC%E8%F0%EE%E2%E0%ED%E8%E5 (программирование)
方法decodeURI()和decodeURIComponent()将导致异常。
非常感谢你的帮助。
答案 0 :(得分:2)
据我所知,浏览器中没有内置支持遗留字符集的百分比编码方案。你必须:
String
)以下是一种方法。对于#1我假设只有3个字符的大写转义需要解码,而字符串的其余部分已经是ASCII,所以我只使用inputStr.replace(/%([0-9A-Z]{2})/g,
replacerFunction
{ {1}}为此。
对于实际解码,您需要从win-1251八位字节到JS字符的映射。在下面的示例中,我使用TextDecoder.decode() API构建映射,只是为了好玩(以防有人在尝试在JS中的不同字符集之间进行转换时找到此答案)。 (注意:截至目前,它还没有得到普遍支持 - 只有Gecko / Blink支持它。)
还有https://github.com/mathiasbynens/windows-1251,我最初想用它来做这个答案,但事实证明,手动构建解码图更容易。
)