解码用javascript逃脱了西里尔文

时间:2014-06-26 15:28:54

标签: javascript encoding character-encoding decoding

问题如下。因为我使用的后端使用了破坏的挂架0.9.7版本,它会在保存时自动转义cookie(I'm using Pylons and having issues with response.set_cookie。而且我无法将其更新为固定版本)cyrilic url'从请求中保存在cookie中的转换为奇怪的转义字符串。例如:

ооо-фронталь.рф

将保存为

\320\276\320\276\320\276-\321\204\321\200\320\276\320\275\321\202\320\260\320\273\321\214.\321\200\321\204`

我在保存之前尝试用urllib引用它,但后来我离开了:

'%5C320%5C276%5C320%5C276%5C320%5C276-%5C321%5C204%5C321%5C200%5C320%5C276%5C320%5C275%5C321%5C202%5C320%5C260%5C320%5C273%5C321%5C214.%5C321%5C200%5C321%5C204'

实际上并没有以任何方式使事情变得更好。有没有办法用javascript解码这个?编码/ decodeURI在这种情况下工作:/

1 个答案:

答案 0 :(得分:1)

它们是UTF-8八进制转义符,因此很难用JavaScript转换。

他是一种可行的方式,虽然它非常可怕:

由于十六进制\320\2760xD0 0xBE所以网址编码为%D0%BE所以:

var s = "\\320\\276\\320\\276\\320\\276-\\321\\204\\321\\200\\320\\276\\320\\275\\321\\202\\320\\260\\320\\273\\321\\214.\\321\\200\\321\\204"

var r = s.replace(/\\(\d{3})?/g, function(a, b) {
    //octal to hex
    return "%" + parseInt(b, 8).toString(16);
});

alert( decodeURIComponent(r) );