国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python中還原JavaScript的escape函數(shù)編碼后字符串的方法

2019-11-25 18:16:29
字體:
供稿:網(wǎng)友

遇到一個(gè)問題需要用Python把JavaScript中escape的中文給還原,但找了大半天,也沒有找到答案,只好自己深入研究解決方案。
我們先來看在js中escape一段文字的編碼

復(fù)制代碼 代碼如下:

a = escape('這是一串文字');
alert(a);

輸出:
復(fù)制代碼 代碼如下:

%u8FD9%u662F%u4E00%u4E32%u6587%u5B57

咋一看,就感覺有點(diǎn)類似json格式,我們來看看標(biāo)準(zhǔn)的json格式編碼同樣的漢子“這是一串文字”
復(fù)制代碼 代碼如下:

# encoding=utf-8
import json
a = '這是一串文字'
print json.dumps(a)

輸出:
復(fù)制代碼 代碼如下:
"/u8fd9/u662f/u4e00/u4e32/u6587/u5b57"

經(jīng)過對(duì)比,其實(shí)就是js escape編碼每個(gè)漢子都是“%u”符號(hào)加4位字符編碼,而json編碼每個(gè)漢子都是“/u”符號(hào)加4位字符編碼,這樣的話,我們可以利用字符串替換操作還原json格式,然后再使用json模塊loads就好
復(fù)制代碼 代碼如下:

# encoding=utf-8
import json
 
# js escape 字符串編碼
c = '%u8FD9%u662F%u4E00%u4E32%u6587%u5B57'
 
# 還原Json對(duì)象
jsonObj =  '"'+"".join([(i and "http://"+i) for i in c.split('%')])+'"'
 
print json.loads(jsonObj)

特別記得在把“%”替換為“/”符號(hào)以后還要再使用雙引號(hào)把字符串包一下,才能算是一個(gè)json對(duì)象,然后才能json.loads出來
后來,好不容易在一個(gè)站點(diǎn)上看到了更簡(jiǎn)便的方法。代碼如下:
復(fù)制代碼 代碼如下:

# 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')])

它的思路其實(shí)都差不多,把“%u”號(hào)替換掉,剩下每一個(gè)都是4位固定長(zhǎng)度的字符編碼,最后在unichr反編碼回中文字符。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 通河县| 依安县| 鞍山市| 滨州市| 特克斯县| 呼伦贝尔市| 江陵县| 文昌市| 宜兰县| 天峨县| 濮阳县| 广元市| 和田县| 灵武市| 荃湾区| 屏东县| 双峰县| 静宁县| 遂溪县| 北京市| 精河县| 崇义县| 新沂市| 横峰县| 锦州市| 新营市| 师宗县| 郑州市| 织金县| 新密市| 涟水县| 建昌县| 长宁区| 鲁甸县| 九龙城区| 三都| 永和县| 东莞市| 阿勒泰市| 屯门区| 甘孜县|