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进行新浪微博的mid和url互相转换实例(10进制和62进制互算)
Apr 25 Python
10个易被忽视但应掌握的Python基本用法
Apr 01 Python
详解Python中的__new__()方法的使用
Apr 09 Python
Python写入CSV文件的方法
Jul 08 Python
Python验证码识别的方法
Jul 10 Python
详解Python进程间通信之命名管道
Aug 28 Python
Python中循环引用(import)失败的解决方法
Apr 22 Python
Python selenium抓取微博内容的示例代码
May 17 Python
Python拼接字符串的7种方法总结
Nov 01 Python
python urllib爬虫模块使用解析
Sep 05 Python
python-docx文件定位读取过程(尝试替换)
Feb 13 Python
python数据预处理方式 :数据降维
Feb 24 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
咖啡的种类和口感
2021/03/03 新手入门
通过ICQ网关发送手机短信的PHP源程序
2006/10/09 PHP
火车头采集器3.0采集图文教程
2007/03/17 PHP
php 目录遍历、删除 函数的使用介绍
2013/04/28 PHP
解析php DOMElement 操作xml 文档的实现代码
2013/05/10 PHP
codeigniter中测试通过的分页类示例
2014/04/17 PHP
php获取Google机器人访问足迹的方法
2015/04/15 PHP
DHTML 中的绝对定位
2006/11/26 Javascript
JavaScript CSS修改学习第三章 修改样式表
2010/02/19 Javascript
jQuery实现表单input中提示文字value随鼠标焦点移进移出而显示或隐藏的代码
2010/03/21 Javascript
getComputedStyle与currentStyle获取样式(style/class)
2013/03/19 Javascript
JavaScript的setAttribute兼容性问题解决方法
2013/11/11 Javascript
javascript面向对象之this关键词用法分析
2015/01/13 Javascript
JS实现队列与堆栈的方法
2016/04/21 Javascript
jquery动态创建div与input的实例代码
2016/10/12 Javascript
Jquery EasyUI $.Parser
2017/06/02 jQuery
JSON 数据格式详解
2017/09/13 Javascript
nodejs 最新版安装npm 的使用详解
2018/01/18 NodeJs
node实现socket链接与GPRS进行通信的方法
2019/05/20 Javascript
深入浅析golang zap 日志库使用(含文件切割、分级别存储和全局使用等)
2020/02/19 Javascript
element-ui 实现响应式导航栏的示例代码
2020/05/08 Javascript
解决vuex数据页面刷新后初始化操作
2020/07/26 Javascript
vue-cli3项目配置eslint代码规范的完整步骤
2020/09/10 Javascript
vue项目中使用rem,在入口文件添加内容操作
2020/11/11 Javascript
js异步接口并发数量控制的方法示例
2020/11/22 Javascript
在Python的框架中为MySQL实现restful接口的教程
2015/04/08 Python
python简单分割文件的方法
2015/07/30 Python
利用python实现命令行有道词典的方法示例
2017/01/31 Python
简单了解Python生成器是什么
2019/07/02 Python
python Gunicorn服务器使用方法详解
2019/07/22 Python
TensorFlow2.1.0安装过程中setuptools、wrapt等相关错误指南
2020/04/08 Python
世界第一冲浪品牌:O’Neill
2016/08/30 全球购物
网站创业计划书
2014/04/30 职场文书
干部选拔任用方案
2014/05/26 职场文书
教师学习党的群众路线教育实践活动心得体会
2014/10/31 职场文书
给老婆的保证书怎么写
2015/05/08 职场文书