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中不同进制互相转换(二进制、八进制、十进制和十六进制)
Apr 05 Python
Python的Bottle框架中返回静态文件和JSON对象的方法
Apr 30 Python
在Django中创建URLconf相关的通用视图的方法
Jul 20 Python
python3基于OpenCV实现证件照背景替换
Jul 18 Python
Window环境下Scrapy开发环境搭建
Nov 18 Python
Python多线程应用于自动化测试操作示例
Dec 06 Python
Pytorch卷积层手动初始化权值的实例
Aug 17 Python
python进阶之自定义可迭代的类
Aug 20 Python
解决Keras 自定义层时遇到版本的问题
Jun 16 Python
Pycharm2020最新激活码|永久激活(附最新激活码和插件的详细教程)
Sep 29 Python
python单元测试框架pytest的使用示例
Oct 07 Python
Python django中如何使用restful框架
Jun 23 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/06/14 PHP
提高PHP性能的编码技巧以及性能优化详细解析
2013/08/24 PHP
PHP环境搭建的详细步骤
2016/06/30 PHP
Laravel框架搜索分页功能示例
2019/02/01 PHP
PHP底层运行机制与工作原理详解
2020/07/31 PHP
浅谈React和Redux的连接react-redux
2017/12/04 Javascript
webpack手动配置React开发环境的步骤
2018/07/02 Javascript
在vue项目中引入高德地图及其UI组件的方法
2018/09/04 Javascript
Vue移动端右滑屏幕返回上一页附源码下载
2019/06/26 Javascript
JavaScript自动生成 年月范围 选择功能完整示例【基于jQuery插件】
2019/09/03 jQuery
webpack 处理CSS资源的实现
2019/09/27 Javascript
Preload基础使用方法详解
2020/02/03 Javascript
VSCode搭建React Native环境
2020/05/07 Javascript
Vue切换div显示隐藏,多选,单选代码解析
2020/07/14 Javascript
[42:56]VGJ.S vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
pandas将numpy数组写入到csv的实例
2018/07/04 Python
Python实现的读取/更改/写入xml文件操作示例
2018/08/30 Python
详解Python3中setuptools、Pip安装教程
2019/06/18 Python
基于Python检测动态物体颜色过程解析
2019/12/04 Python
Python字符串、列表、元组、字典、集合的补充实例详解
2019/12/20 Python
Django密码存储策略分析
2020/01/09 Python
python的help函数如何使用
2020/06/11 Python
python批量处理多DNS多域名的nslookup解析实现
2020/06/28 Python
python自动提取文本中的时间(包含中文日期)
2020/08/31 Python
Python Django路径配置实现过程解析
2020/11/05 Python
Python爬虫爬取微博热搜保存为 Markdown 文件的源码
2021/02/22 Python
台湾网友喜爱的综合型网路购物商城:Yahoo! 奇摩购物中心
2018/03/10 全球购物
怎样创建、运行java程序
2014/08/01 面试题
大学生职业规划书的范本
2014/02/18 职场文书
经贸专业毕业生求职信范文
2014/05/01 职场文书
安全宣传标语
2014/06/10 职场文书
公司财务经理岗位职责
2015/04/08 职场文书
2015年依法治校工作总结
2015/07/27 职场文书
《鲸》教学反思
2016/02/23 职场文书
详解SpringBoot异常处理流程及原理
2021/06/21 Java/Android
python3 字符串str和bytes相互转换
2022/03/23 Python