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编写vim插件的简单示例
Apr 17 Python
python实现指定字符串补全空格的方法
Apr 30 Python
Python网络爬虫与信息提取(实例讲解)
Aug 29 Python
Python程序退出方式小结
Dec 09 Python
python打开windows应用程序的实例
Jun 28 Python
如何使用python操作vmware
Jul 27 Python
Anaconda之conda常用命令介绍(安装、更新、删除)
Oct 06 Python
Python龙贝格法求积分实例
Feb 29 Python
django 多数据库及分库实现方式
Apr 01 Python
解决Jupyter Notebook开始菜单栏Anaconda下消失的问题
Apr 13 Python
Python调用C语言程序方法解析
Jul 07 Python
使用Python webdriver图书馆抢座自动预约的正确方法
Mar 04 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/10/09 PHP
Apache设置虚拟WEB
2006/10/09 PHP
使用session判断用户登录用户权限(超简单)
2013/06/08 PHP
深入分析PHP设计模式
2020/06/15 PHP
ASP.NET中使用后端代码注册脚本 生成JQUERY-EASYUI的界面错位的解决方法
2010/06/12 Javascript
javascript学习笔记(九) js对象 设计模式
2012/06/19 Javascript
一个基于jquery的文本框记数器
2012/09/19 Javascript
让checkbox不选中即将选中的checkbox不选中
2014/07/11 Javascript
一个js过滤空格的小函数
2014/10/10 Javascript
JavaScript学习笔记整理_用于模式匹配的String方法
2016/09/19 Javascript
js实现图片360度旋转
2017/01/22 Javascript
canvas绘制的直线动画
2017/01/23 Javascript
Javascript中引用类型传递的知识点小结
2017/03/06 Javascript
vue中简单弹框dialog的实现方法
2018/02/26 Javascript
微信小程序之侧边栏滑动实现过程解析(附完整源码)
2019/08/23 Javascript
微信小程序 函数防抖 解决重复点击消耗性能问题实现代码
2019/09/12 Javascript
浅谈实现在线预览PDF的几种解决办法
2020/08/10 Javascript
vue实现简单的登录弹出框
2020/10/26 Javascript
[52:10]LGD vs Optic Supermajor小组赛D组胜者组决赛 BO3 第二场 6.3
2018/06/04 DOTA
Python面向对象编程中关于类和方法的学习笔记
2016/06/30 Python
python贪婪匹配以及多行匹配的实例讲解
2018/04/19 Python
python批量导入数据进Elasticsearch的实例
2018/05/30 Python
Python使用pyautogui模块实现自动化鼠标和键盘操作示例
2018/09/04 Python
用python3 返回鼠标位置的实现方法(带界面)
2019/07/05 Python
公司营业员的工作总结自我评价
2013/10/05 职场文书
求职意向书
2014/04/01 职场文书
《少年王冕》教学反思
2014/04/11 职场文书
企业安全生产承诺书
2014/05/22 职场文书
优秀应届毕业生自荐书
2014/06/29 职场文书
中学教师师德师风演讲稿
2014/08/22 职场文书
学雷锋主题班会教案
2015/08/13 职场文书
小学语文教师研修日志
2015/11/13 职场文书
2016年感恩节寄语
2015/12/07 职场文书
MySQL分区表管理命令汇总
2022/03/21 MySQL
css3属性选择器 “~”(波浪号) “,”(逗号) “+”(加号)和 “>”(大于号)
2022/04/19 HTML / CSS
CSS的calc函数用法小结
2022/06/25 HTML / CSS