将javascript序列解码为python

时间:2011-11-25 13:05:37

标签: javascript python decode

我是Python的初学者,试图解码这个javascript序列。我不仅是Python的初学者,我更了解javascript :)我知道我可以把它放到这样的在线解码器中:http://coderstoolbox.net/string/但我想自己处理它 - 更多的是练习而不是任何东西别...我使用Beautiful Soup来获取数据,所以我的功能可用于解码。

如果有人能指出我在python中的等效函数,我会很感激。

function encode(str){
 var t=''; var s=unescape(str);
 var x=Math.round(Math.sqrt(49));
 for(var i=0;i<s.length;i++) t+=
  String.fromCharCode(s.charCodeAt(i)^(i%2?x:0));
 print(t);
}

到目前为止,这是我对它的理解:

  1. 我想我可以在BS中使用'HTML实体来unescape ..?
  2. 第二个似乎是一个常数?平方根49个圆形...
  3. 设置循环
  4. 这是我得不到的。 1我不知道fromCharCode函数的作用。 2不确定最后的位是什么。看起来它从我获得一个字符代码的力量。我知道我正在用2进行模数,但是'?x:0'是什么? - 你会如何在Python中复制它?
  5. 感谢阅读!

    编辑:是否有一个可以运行此代码的python库?我之前用bash和rhino做过这个,但Python中的替代品对于初学者来说似乎有点吓人,比如蜘蛛侠等...

2 个答案:

答案 0 :(得分:0)

我不懂Python,但我可以解释这里发生了什么,以便你可以用Python重写。

1)声明了函数编码而没有赋值,因此在JavaScript中它将被提升到其父函数的顶部(如果有的话)。

2)内部函数编码有4个变量将被提升到函数编码的顶部:

  • t,分配给空字符串,表示0长度但类型为字符串
  • s,分配了通过unencode函数传递的参数“str”的值。 unencode只是反转URI保留字符编码。
  • x,类型编号,值为7
  • i,分配为0并用作循环迭代器

3)循环索引从0开始,并且不迟于索引与变量s上的字符长度相同的大小。

4)循环以草率方式编写而没有花括号,因此它在第一个换行符处终止,这意味着变量t在反映变量s时执行字符串连接。

5)以字符串对象开头的下一行看起来应该是循环,但不是,因为这段代码很邋。无论如何都没关系,因为变量s并没有真正用于任何其他事情。

6)使用print函数,变量t作为参数。变量t看起来应该与变量s相同,这可能与本代码的原始作者不同。

7)我不知道什么是印刷品。也许原作者的意思是alert或console.log而不是print。

答案 1 :(得分:0)

1)相当于unescape的python是python 2.x系列中的urllib.unquote()和python 3.x系列中的urllib.parse.unquote()

2)您认为最简单的方法是x = 7

3)循环使用字符串章程的最简单方法是for c in string:,但要获得你应该做的索引for i,c in enumerate(string):

4)string.charChodeAt(c)与chr(c)

相同

最后我会复制循环部分,如下所示:

result = []
for i,c in enumerate(string):
    result.append(chr(ord(c)^(x if i%2 else 0)))
print("".join(result))

实际上使用临时数组来进行追加比发生在字符串上更有效,因为字符串不会变异