最近在储存url时,遇到中文被转码了,因此想转回来,结果折腾好久,记录下。
尝试
一串字符,用在线unicode转中文,结果还是不对.
原内容:
%5B9500%5D%5B552e%5D%5B6307%5D%5B6807%5D%5B5b8c%5D%5B6210%5D%5B7387%5D111
%5B8d39%5D%5B7528%5D%5B989d%5D%5B5ea6%5D%5B67e5%5D%5B8be2%5D
转后:
[9500][552e][6307][6807][5b8c][6210][7387]111
[8d39][7528][989d][5ea6][67e5][8be2]
心想这是什么东西?
难道就这样失败了?
仔细看看内容,四个字,四个字的,是不是有点像unicode?可是中括号是什么鬼?
试着拿一个数试试,\u9500
.
转码后.png
果然,不是巧合,真的就是unicode, 可是这么多括号,手动是不可能的。
怎么才能去除括号并且换上\u
呢?
当然首选是pyhton, 上代码:
# coding=utf-8
from urllib import parse
import re
def _change(matched):
if matched.group(0) == "[":
return '\\u'
else:
return ''
def url_de(x):
'''对URL进行解码'''
replaceStr = re.sub(
r'([\[|\]])', _change, parse.unquote(x))
return replaceStr
x = '''
%5B9500%5D%5B552e%5D%5B6307%5D%5B6807%5D%5B5b8c%5D%5B6210%5D%5B7387%5D111
%5B8d39%5D%5B7528%5D%5B989d%5D%5B5ea6%5D%5B67e5%5D%5B8be2%5D
'''
print(url_de(x))
首先,我们引入要用的包,这里主要是两个包,parse用来做第一遍转码,转成带括号的形式。然后使用re.sub对括号进行替换和消除。
输出:
第一次转码.png
其实应该有方法再转一次输出中文的,可是没找到方法。只能用笨办法了,复制输出的内容到在线unicode转中文。
转码.png
成功了,原来是这样。
中文.png
有哪位知道直接转出中文的,请告诉我,不胜感激。
网友评论
def func(string):
string = parse.unquote(string)
string = string.replace('[', '\\u').replace(']', '')
return json.loads(f'"{string}"')
%5B9500%5D%5B552e%5D%5B6307%5D%5B6807%5D%5B5b8c%5D%5B6210%5D%5B7387%5D111
测试一下,返回的应该是中文