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解决汉字编码问题:Unicode Decode Error
Jan 19 Python
python对DICOM图像的读取方法详解
Jul 17 Python
tensorflow构建BP神经网络的方法
Mar 12 Python
利用python如何处理nc数据详解
May 23 Python
django 发送邮件和缓存的实现代码
Jul 18 Python
python 解决动态的定义变量名,并给其赋值的方法(大数据处理)
Nov 10 Python
解决python中画图时x,y轴名称出现中文乱码的问题
Jan 29 Python
对pytorch中的梯度更新方法详解
Aug 20 Python
Python如何通过百度翻译API实现翻译功能
Apr 02 Python
浅谈keras使用预训练模型vgg16分类,损失和准确度不变
Jul 02 Python
Python 没有main函数的原因
Jul 10 Python
浅析Python 序列化与反序列化
Aug 05 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 output buffering缓存及程序缓存深入解析
2013/07/15 PHP
php创建无限级树型菜单
2015/11/05 PHP
PHP 二维关联数组根据其中一个字段排序(推荐)
2017/04/04 PHP
thinkPHP通用控制器实现方法示例
2017/11/23 PHP
PHP命名空间(namespace)原理与用法详解
2019/12/11 PHP
初窥JQuery-Jquery简介 入门了解篇
2010/11/25 Javascript
jquery插件hiAlert实现网页对话框美化
2015/05/03 Javascript
js中toString()和String()区别详解
2017/03/23 Javascript
React-native桥接Android原生开发详解
2018/01/17 Javascript
详解javascript中的Error对象
2019/04/25 Javascript
记录一次开发微信网页分享的步骤
2019/05/07 Javascript
vue学习笔记之给组件绑定原生事件操作示例
2020/02/27 Javascript
[05:04]完美世界携手游戏风云打造 卡尔工作室地图界面篇
2013/04/23 DOTA
python语言中with as的用法使用详解
2018/02/23 Python
Django2.1.3 中间件使用详解
2018/11/26 Python
Python 运行 shell 获取输出结果的实例
2019/01/07 Python
使用Python给头像戴上圣诞帽的图像操作过程解析
2019/09/20 Python
Python实现中值滤波去噪方式
2019/12/18 Python
python GUI库图形界面开发之PyQt5日期时间控件QDateTimeEdit详细使用方法与实例
2020/02/27 Python
你需要学会的8个Python列表技巧
2020/06/24 Python
Python实现简单的猜单词小游戏
2020/10/28 Python
python实现图片,视频人脸识别(opencv版)
2020/11/18 Python
python opencv肤色检测的实现示例
2020/12/21 Python
10个顶级Python实用库推荐
2021/03/04 Python
今天学到的CSS最新技术(与图片背景相关)
2012/12/24 HTML / CSS
Weblogc domain问题
2014/01/27 面试题
海飞丝广告词
2014/03/20 职场文书
学习型党组织心得体会
2014/09/12 职场文书
城管执法人员纪律作风整顿思想汇报
2014/09/13 职场文书
房屋财产继承协议书范本
2014/11/03 职场文书
大足石刻导游词
2015/02/02 职场文书
教师求职信怎么写
2015/03/20 职场文书
2015年初中教师个人工作总结
2015/07/21 职场文书
关于运动会的广播稿
2015/08/19 职场文书
python使用openpyxl库读写Excel表格的方法(增删改查操作)
2021/05/02 Python
SQL Server中使用判断语句(IF ELSE/CASE WHEN )案例
2021/07/07 SQL Server