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 相关文章推荐
python 字典(dict)遍历的四种方法性能测试报告
Jun 25 Python
python内存管理分析
Apr 08 Python
Python制作Windows系统服务
Mar 25 Python
Python正则捕获操作示例
Aug 19 Python
PyCharm在win10的64位系统安装实例
Nov 26 Python
Python中使用支持向量机(SVM)算法
Dec 26 Python
基于pandas数据样本行列选取的方法
Apr 20 Python
详谈pandas中agg函数和apply函数的区别
Apr 20 Python
Python小工具之消耗系统指定大小内存的方法
Dec 03 Python
python实现一个简单的ping工具方法
Jan 31 Python
django 微信网页授权登陆的实现
Jul 30 Python
Python如何避免文件同名产生覆盖
Jun 09 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&&mysql)三
2006/10/09 PHP
基于Discuz security.inc.php代码的深入分析
2013/06/03 PHP
PHP入门教程之操作符与控制结构流程详解
2016/09/09 PHP
PHP PDOStatement::getAttribute讲解
2019/02/01 PHP
PHP cookie与session会话基本用法实例分析
2019/11/18 PHP
关于IFRAME 自适应高度的研究
2006/07/20 Javascript
getElementsByTagName vs selectNodes效率 及兼容的selectNodes实现
2010/02/26 Javascript
JavaScript实现的石头剪刀布游戏源码分享
2014/08/22 Javascript
JS通过Cookie判断页面是否为首次打开
2016/02/05 Javascript
js 调用百度分享功能
2017/02/27 Javascript
React中使用collections时key的重要性详解
2017/08/07 Javascript
利用百度地图API获取当前位置信息的实例
2017/11/06 Javascript
three.js中3D视野的缩放实现代码
2017/11/16 Javascript
解决vue中post方式提交数据后台无法接收的问题
2018/08/11 Javascript
新手必须知的Node.js 4个JavaScript基本概念
2018/09/16 Javascript
js微信分享接口调用详解
2019/07/23 Javascript
在Chrome DevTools中调试JavaScript的实现
2020/04/07 Javascript
vue通过接口直接下载java生成好的Excel表格案例
2020/10/26 Javascript
在python中使用正则表达式查找可嵌套字符串组
2017/10/24 Python
python实现AES和RSA加解密的方法
2019/03/28 Python
Python中新式类与经典类的区别详析
2019/07/10 Python
Python实现微信好友的数据分析
2019/12/16 Python
使用canvas生成含有微信头像的邀请海报没有微信头像问题
2019/10/29 HTML / CSS
美国在线工具商店:Acme Tools
2018/06/26 全球购物
莫斯科隐形眼镜网上商店:Linzi
2019/07/22 全球购物
如何查找和删除数据库中的重复数据
2014/11/05 面试题
自我鉴定书范文
2013/10/02 职场文书
毕业生求职简历中的自我评价
2013/10/18 职场文书
毕业生写求职信的要点
2014/03/04 职场文书
租房协议书范文
2014/08/20 职场文书
党的群众路线对照检查材料范文
2014/09/24 职场文书
2014年语文教学工作总结
2014/12/17 职场文书
趣味运动会开幕词
2015/01/28 职场文书
用Python监控你的朋友都在浏览哪些网站?
2021/05/27 Python
微信小程序基础教程之echart的使用
2021/06/01 Javascript
MySQL GTID复制的具体使用
2022/05/20 MySQL