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 sys.path详细介绍
Oct 17 Python
Django集成百度富文本编辑器uEditor攻略
Jul 04 Python
Python向日志输出中添加上下文信息
May 24 Python
python 连接sqlite及简单操作
Jun 30 Python
Python3中exp()函数用法分析
Feb 19 Python
PySide和PyQt加载ui文件的两种方法
Feb 27 Python
解决python3中的requests解析中文页面出现乱码问题
Apr 19 Python
Python API 自动化实战详解(纯代码)
Jun 11 Python
Python 中如何实现参数化测试的方法示例
Dec 10 Python
python中字典增加和删除使用方法
Sep 30 Python
python和opencv构建运动检测器的实现
Mar 03 Python
解决hive中导入text文件遇到的坑
Apr 07 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 选项及相关信息函数库
2006/12/04 PHP
ThinkPHP CURD方法之page方法详解
2014/06/18 PHP
php修改上传图片尺寸的方法
2015/04/14 PHP
微信获取用户地理位置信息的原理与步骤
2015/11/12 PHP
PHP 使用 Imagick 裁切/生成缩略图/添加水印自动检测和处理 GIF
2016/02/19 PHP
CentOS 上搭建 PHP7 开发测试环境
2017/02/26 PHP
PhpStorm+xdebug+postman调试技巧分享
2020/09/15 PHP
JQuery Dialog(JS 模态窗口,可拖拽的DIV)
2010/02/07 Javascript
禁止js文件缓存的代码
2010/04/09 Javascript
Javascript JSQL,SQL无处不在,
2010/05/05 Javascript
js 控制图片大小核心讲解
2013/10/09 Javascript
IE下支持文本框和密码框placeholder效果的JQuery插件分享
2015/01/31 Javascript
JavaScript代码里的判断小结
2016/08/22 Javascript
jQuery实现DIV响应鼠标滑过由下向上展开效果示例【测试可用】
2018/04/26 jQuery
JS数组进阶示例【数组的几种函数用法】
2020/01/16 Javascript
[36:05]完美世界DOTA2联赛循环赛 Forest vs DM 第一场 11.06
2020/11/06 DOTA
python实现bucket排序算法实例分析
2015/05/04 Python
python urllib爬取百度云连接的实例代码
2017/06/19 Python
Python装饰器用法实例总结
2018/02/07 Python
python实现关键词提取的示例讲解
2018/04/28 Python
python微信好友数据分析详解
2018/11/19 Python
浅谈python3发送post请求参数为空的情况
2018/12/28 Python
Python后台开发Django的教程详解(启动)
2019/04/08 Python
python爬虫 猫眼电影和电影天堂数据csv和mysql存储过程解析
2019/09/05 Python
python图片剪裁代码(图片按四个点坐标剪裁)
2020/03/10 Python
Python实现简单的2048小游戏
2021/03/01 Python
Meli Melo官网:名媛们钟爱的英国奢侈手包品牌
2017/04/17 全球购物
维多利亚的秘密阿联酋官网:Victoria’s Secret阿联酋
2019/12/07 全球购物
西班牙购买隐形眼镜、眼镜和太阳镜网站:Lentiamo.es
2020/06/11 全球购物
销售副总经理岗位职责
2013/12/11 职场文书
人力资源专员岗位职责
2014/01/30 职场文书
触电现场处置方案
2014/05/14 职场文书
助残日活动总结
2014/08/27 职场文书
社保缴纳证明申请书
2014/11/03 职场文书
教师师德工作总结2015
2015/07/22 职场文书
2016年清明节寄语
2015/12/04 职场文书