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 logging 日志轮转文件不删除问题的解决方法
Aug 02 Python
python利用lxml读写xml格式的文件
Aug 10 Python
python模块之time模块(实例讲解)
Sep 13 Python
详解appium+python 启动一个app步骤
Dec 20 Python
Python subprocess模块功能与常见用法实例详解
Jun 28 Python
python中的json总结
Oct 11 Python
Python函数返回不定数量的值方法
Jan 22 Python
将 Ubuntu 16 和 18 上的 python 升级到最新 python3.8 的方法教程
Mar 11 Python
解决Python 异常TypeError: cannot concatenate 'str' and 'int' objects
Apr 08 Python
Django实现前台上传并显示图片功能
May 29 Python
pycharm 2020.2.4 pip install Flask 报错 Error:Non-zero exit code的问题
Dec 04 Python
python进行二次方程式计算的实例讲解
Dec 06 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之CodeIgniter学习笔记
2013/06/17 PHP
php 模拟post_验证页面的返回状态(实例讲解)
2013/10/28 PHP
PHP 错误处理机制
2015/07/06 PHP
Yii Framework框架使用PHPExcel组件的方法示例
2019/07/24 PHP
laravel 如何实现引入自己的函数或类库
2019/10/15 PHP
javascript 日期时间函数(经典+完善+实用)
2009/05/27 Javascript
JQuery EasyUI 对话框的使用方法
2010/10/24 Javascript
js动态修改input输入框的type属性(实现方法解析)
2013/11/13 Javascript
JS获取随机数函数可自定义最小值最大值
2014/05/08 Javascript
jQuery实现信息提示框(带有圆角框与动画)效果
2015/08/07 Javascript
jQuery实现MSN中文网滑动Tab菜单效果代码
2015/09/09 Javascript
实践中学习AngularJS表单
2016/03/21 Javascript
设置jQueryUI DatePicker默认语言为中文
2016/06/04 Javascript
jQuery实现日期联动效果实例
2016/07/26 Javascript
nodejs中sleep功能实现暂停几秒的方法
2017/07/12 NodeJs
JS HTML图片显示Canvas 压缩功能
2017/07/21 Javascript
详解layui弹窗父子窗口之间传参数的方法
2018/01/16 Javascript
jQuery-ui插件sortable实现自由拖动排序
2018/12/01 jQuery
JavaScript模板引擎原理与用法详解
2018/12/24 Javascript
轻松解决JavaScript定时器越走越快的问题
2019/05/13 Javascript
layer.open提交子页面的form和layedit文本编辑内容的方法
2019/09/27 Javascript
vue+elementUI动态增加表单项并添加验证的代码详解
2020/12/17 Vue.js
[02:16]卖萌的僵尸 DOTA2神话信使飞僵小宝来袭
2014/03/24 DOTA
[00:16]热血竞技场
2019/03/06 DOTA
新手如何快速入门Python(菜鸟必看篇)
2017/06/10 Python
python接口自动化(十七)--Json 数据处理---一次爬坑记(详解)
2019/04/18 Python
Django web框架使用url path name详解
2019/04/29 Python
python计算n的阶乘的方法代码
2019/10/25 Python
WxPython实现无边框界面
2019/11/18 Python
python opencv实现gif图片分解的示例代码
2019/12/13 Python
建筑专业自我鉴定
2013/10/22 职场文书
洗手间标语
2014/06/23 职场文书
元旦趣味活动方案
2014/08/22 职场文书
网上祭先烈心得体会
2014/09/01 职场文书
小学生通知书评语
2014/12/31 职场文书
Python编程根据字典列表相同键的值进行合并
2021/10/05 Python