Python中还原JavaScript的escape函数编码后字符串的方法


Posted in Python onAugust 22, 2014

遇到一个问题需要用Python把JavaScript中escape的中文给还原,但找了大半天,也没有找到答案,只好自己深入研究解决方案。
我们先来看在js中escape一段文字的编码

a = escape('这是一串文字');

alert(a);

输出:
%u8FD9%u662F%u4E00%u4E32%u6587%u5B57

咋一看,就感觉有点类似json格式,我们来看看标准的json格式编码同样的汉子“这是一串文字”
# encoding=utf-8

import json

a = '这是一串文字'

print json.dumps(a)

输出:
"\u8fd9\u662f\u4e00\u4e32\u6587\u5b57"

经过对比,其实就是js escape编码每个汉子都是“%u”符号加4位字符编码,而json编码每个汉子都是“\u”符号加4位字符编码,这样的话,我们可以利用字符串替换操作还原json格式,然后再使用json模块loads就好
# encoding=utf-8

import json

 

# js escape 字符串编码

c = '%u8FD9%u662F%u4E00%u4E32%u6587%u5B57'

 

# 还原Json对象

jsonObj =  '"'+"".join([(i and "\\"+i) for i in c.split('%')])+'"'

 

print json.loads(jsonObj)

特别记得在把“%”替换为“\”符号以后还要再使用双引号把字符串包一下,才能算是一个json对象,然后才能json.loads出来
后来,好不容易在一个站点上看到了更简便的方法。代码如下:
# encoding=utf-8

c = '%u8FD9%u662F%u4E00%u4E32%u6587%u5B57'

print "".join([(len(i)>0 and unichr(int(i,16)) or "") for i in c.split('%u')])

它的思路其实都差不多,把“%u”号替换掉,剩下每一个都是4位固定长度的字符编码,最后在unichr反编码回中文字符。
Python 相关文章推荐
关于numpy中np.nonzero()函数用法的详解
Feb 07 Python
详解用Python处理HTML转义字符的5种方式
Dec 27 Python
pyQt4实现俄罗斯方块游戏
Jun 26 Python
python使用pdfminer解析pdf文件的方法示例
Dec 20 Python
python实现windows壁纸定期更换功能
Jan 21 Python
bluepy 一款python封装的BLE利器简单介绍
Jun 25 Python
解决Django layui {{}}冲突的问题
Aug 29 Python
python实现俄罗斯方块小游戏
Apr 24 Python
Python enumerate() 函数如何实现索引功能
Jun 29 Python
Python获取浏览器窗口句柄过程解析
Jul 25 Python
Python与C/C++的相互调用案例
Mar 04 Python
上帝为你开了一扇窗之Tkinter常用函数详解
Jun 02 Python
python错误:AttributeError: 'module' object has no attribute 'setdefaultencoding'问题的解决方法
Aug 22 #Python
Python升级提示Tkinter模块找不到的解决方法
Aug 22 #Python
Python实现多行注释的另类方法
Aug 22 #Python
Python利用pyHook实现监听用户鼠标与键盘事件
Aug 21 #Python
Python发送Email方法实例
Aug 21 #Python
Python生成验证码实例
Aug 21 #Python
python中去空格函数的用法
Aug 21 #Python
You might like
怎样在php中使用PDF文档功能
2006/10/09 PHP
PHP多线程抓取网页实现代码
2010/07/22 PHP
探讨如何在php168_cms中提取验证码
2013/06/08 PHP
PHP记录页面停留时间的方法
2016/03/30 PHP
使用javascript实现页面定时跳转总结篇
2013/09/21 Javascript
调用DOM对象的focus使文本框获得焦点
2014/02/19 Javascript
ExtJS4利根据登录后不同的角色分配不同的树形菜单
2014/05/02 Javascript
推荐8款jQuery轻量级树形Tree插件
2014/11/12 Javascript
node.js中的path.isAbsolute方法使用说明
2014/12/08 Javascript
javascript算法题:求任意一个1-9位不重复的N位数在该组合中的大小排列序号
2015/04/01 Javascript
jquery.map()方法的使用详解
2015/07/09 Javascript
利用HTML5的画布Canvas实现刮刮卡效果
2015/09/06 Javascript
javascript学习指南之回调问题
2016/04/23 Javascript
jQuery实现6位数字密码输入框
2016/12/29 Javascript
最常见和最有用的字符串相关的方法详解
2017/02/06 Javascript
ES6下React组件的写法示例代码
2017/05/04 Javascript
js实现京东轮播图效果
2017/06/30 Javascript
Nodejs监控事件循环异常示例详解
2019/09/22 NodeJs
Vue.js计算机属性computed和methods方法详解
2019/10/12 Javascript
[59:36]2018DOTA2亚洲邀请赛 4.3 突围赛 Secret vs VG 第二场
2018/04/04 DOTA
python下如何让web元素的生成更简单的分析
2008/07/17 Python
Python中的random()方法的使用介绍
2015/05/15 Python
python实现搜索指定目录下文件及文件内搜索指定关键词的方法
2015/06/28 Python
Python多进程池 multiprocessing Pool用法示例
2018/09/07 Python
详解Python requests 超时和重试的方法
2018/12/18 Python
Python如何处理大数据?3个技巧效率提升攻略(推荐)
2019/04/15 Python
Python实现Singleton模式的方式详解
2019/08/08 Python
pycharm2020.1.2永久破解激活教程,实测有效
2020/10/29 Python
HTML5新增加的功能详解
2016/09/05 HTML / CSS
美国家喻户晓的保健品品牌:Vitamin World(维他命世界)
2016/08/19 全球购物
百思买加拿大:Best Buy Canada
2018/03/20 全球购物
白俄罗斯大卖场:21vek.by
2019/07/25 全球购物
团日活动总结模板
2014/06/25 职场文书
万能检讨书2000字
2014/10/17 职场文书
房产电话营销开场白
2015/05/29 职场文书
汽车销售员工作总结
2015/08/12 职场文书