使用JavaScript解码url编码的windows-1251(cp1251)字符串

时间:2017-01-03 16:59:20

标签: javascript decode decoder cp1251 windows-1251

我遇到了一个问题,遗憾的是,我还没有找到正确的解决方案:我需要解码用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()将导致异常。

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:2)

据我所知,浏览器中没有内置支持遗留字符集的百分比编码方案。你必须:

  1. 找到代表win-1251八位字节的%-escape,
  2. 将win-1251八位字节解码为相应的字符(JS String
  3. 以下是一种方法。对于#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,我最初想用它来做这个答案,但事实证明,手动构建解码图更容易。

    
    
    )