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 相关文章推荐
python3模拟百度登录并实现百度贴吧签到示例分享(百度贴吧自动签到)
Feb 24 Python
python将ip地址转换成整数的方法
Mar 17 Python
编写Python脚本来获取mp3文件tag信息的教程
May 04 Python
详解Python中的条件判断语句
May 14 Python
python实现自动登录人人网并采集信息的方法
Jun 28 Python
深入理解Python对Json的解析
Feb 14 Python
使用python中的in ,not in来检查元素是不是在列表中的方法
Jul 06 Python
浅谈python函数调用返回两个或多个变量的方法
Jan 23 Python
twilio python自动拨打电话,播放自定义mp3音频的方法
Aug 08 Python
Python基于yield遍历多个可迭代对象
Mar 12 Python
Python中猜拳游戏与猜筛子游戏的实现方法
Sep 04 Python
python中random模块详解
Mar 01 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 危险函数解释 分析
2009/04/22 PHP
基于pear auth实现登录验证
2010/02/26 PHP
javascript中获取选中对象的类型
2007/04/02 Javascript
jquery png 透明解决方案(推荐)
2010/08/21 Javascript
IE6-IE9不支持table.innerHTML的解决方法分享
2012/09/14 Javascript
使用Java实现简单的server/client回显功能的方法介绍
2013/05/03 Javascript
javascript动态修改Li节点值的方法
2015/01/20 Javascript
Bootstrap每天必学之前端开发框架
2015/11/19 Javascript
两种JavaScript的AES加密方式(可与Java相互加解密)
2016/08/02 Javascript
纯js和css完成贪吃蛇小游戏demo
2016/09/01 Javascript
jQuery实现带遮罩层效果的blockUI弹出层示例【附demo源码下载】
2016/09/14 Javascript
JS经典正则表达式笔试题汇总
2016/12/15 Javascript
微信小程序开发之Tabbar实例详解
2017/01/09 Javascript
angularjs定时任务的设置与清除示例
2017/06/02 Javascript
微信小程序实现文字无限轮播效果
2018/12/28 Javascript
python解析xml模块封装代码
2014/02/07 Python
selenium python浏览器多窗口处理代码示例
2018/01/15 Python
解决Python2.7读写文件中的中文乱码问题
2018/04/12 Python
Python基于Tkinter模块实现的弹球小游戏
2018/12/27 Python
如何用Python来搭建一个简单的推荐系统
2019/08/07 Python
python使用opencv实现马赛克效果示例
2019/09/28 Python
tensorflow实现在函数中用tf.Print输出中间值
2020/01/21 Python
tensorflow 实现自定义layer并添加到计算图中
2020/02/04 Python
python requests包的request()函数中的参数-params和data的区别介绍
2020/05/05 Python
基于pandas向csv添加新的行和列
2020/05/25 Python
python不同系统中打开方法
2020/06/23 Python
CSS3实现3D翻书效果
2016/06/20 HTML / CSS
新西兰最大的在线设计师眼镜店:SmartBuyGlasses新西兰
2017/10/20 全球购物
中国茶叶、茶具一站式网上购物商城:醉品茶城
2018/07/03 全球购物
大四学生毕业自荐信
2013/11/07 职场文书
大学社团计划书
2014/05/01 职场文书
初三语文教学计划
2015/01/22 职场文书
求职简历自我评价范文
2015/03/10 职场文书
升学宴家长答谢词
2015/09/29 职场文书
2016优秀大学生个人事迹材料范文
2016/03/01 职场文书
Python数据可视化之绘制柱状图和条形图
2021/05/25 Python