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 random模块(获取随机数)常用方法和使用例子
May 13 Python
使用Protocol Buffers的C语言拓展提速Python程序的示例
Apr 16 Python
Python实现对比不同字体中的同一字符的显示效果
Apr 23 Python
介绍Python中内置的itertools模块
Apr 29 Python
python中pandas.DataFrame的简单操作方法(创建、索引、增添与删除)
Mar 12 Python
详解python函数传参是传值还是传引用
Jan 16 Python
Python实现求一个集合所有子集的示例
May 04 Python
pytorch + visdom CNN处理自建图片数据集的方法
Jun 04 Python
python 实现分页显示从es中获取的数据方法
Dec 26 Python
详解pycharm连接不上mysql数据库的解决办法
Jan 10 Python
Spring Boot中使用IntelliJ IDEA插件EasyCode一键生成代码详细方法
Mar 20 Python
django admin管理工具自定义时间区间筛选器DateRangeFilter介绍
May 19 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
4月1日重磅发布!《星际争霸II》6.0.0版本更新
2020/04/09 星际争霸
浅谈PHP 闭包特性在实际应用中的问题
2009/10/30 PHP
php处理restful请求的路由类分享
2014/02/27 PHP
windows7下安装php的imagick和imagemagick扩展教程
2014/07/04 PHP
PHP生成不重复随机数的方法汇总
2014/11/19 PHP
thinkphp5 URL和路由的功能详解与实例
2017/12/26 PHP
键盘 keycode的值 javascript时触发事件时很有用的要素
2009/11/02 Javascript
远离JS灾难css灾难之 js私有函数和css选择器作为容器
2011/12/11 Javascript
Angularjs制作简单的路由功能demo
2015/04/14 Javascript
JQuery CheckBox(复选框)操作方法汇总
2015/04/15 Javascript
jQuery实现监控页面所有ajax请求的方法
2015/12/10 Javascript
js 弹出对话框(遮罩)透明,可拖动的简单实例
2016/07/11 Javascript
jQuery 全选 全部选 反选 实现代码
2016/08/17 Javascript
AngularJs Understanding the Model Component
2016/09/02 Javascript
etmvc+jQuery EasyUI+combobox多值操作实现角色授权实例
2016/11/09 Javascript
无限循环轮播图之运动框架(原生JS实现)
2017/10/01 Javascript
vue做网页开场视频的实例代码
2017/10/20 Javascript
javascript原生封装一个淡入淡出效果的函数测试实例代码
2018/03/19 Javascript
JavaScript中call和apply方法的区别实例分析
2018/08/03 Javascript
js动态设置select下拉菜单的默认选中项实例
2018/08/21 Javascript
原生JS实现图片懒加载之页面性能优化
2019/04/26 Javascript
vue 实现购物车总价计算
2019/11/06 Javascript
微信小程序之左右布局的实现代码
2019/12/13 Javascript
Python生成器(Generator)详解
2015/04/13 Python
python 爬虫出现403禁止访问错误详解
2017/03/11 Python
Python import与from import使用及区别介绍
2018/09/06 Python
Scrapy框架使用的基本知识
2018/10/21 Python
python实现图片压缩代码实例
2019/08/12 Python
python实现扫雷游戏
2020/03/03 Python
pyautogui自动化控制鼠标和键盘操作的步骤
2020/04/01 Python
webView加载html图片遇到的问题解决
2019/10/08 HTML / CSS
美国乒乓球设备、配件和服装品牌:Killerspin
2020/06/07 全球购物
局域网标准
2016/09/10 面试题
《小石潭记》教学反思
2014/02/13 职场文书
租房协议书范例
2014/10/14 职场文书
2015新学期家长寄语
2015/02/26 职场文书