url中文转码过种记录

作者: Stevent | 来源:发表于2018-07-19 16:28 被阅读4次

最近在储存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
转码后.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

有哪位知道直接转出中文的,请告诉我,不胜感激。

相关文章

网友评论

  • 渔父歌:你可以试试这个函数,需要用到 urllib.parse.unquote和 json.loads:
    def func(string):
    string = parse.unquote(string)
    string = string.replace('[', '\\u').replace(']', '')
    return json.loads(f'"{string}"')
    Stevent:@程序员喜欢猫 return json.loads(f'"{string}"') 这里是单引号里双引号吗?
    渔父歌:你拿
    %5B9500%5D%5B552e%5D%5B6307%5D%5B6807%5D%5B5b8c%5D%5B6210%5D%5B7387%5D111
    测试一下,返回的应该是中文
    Stevent:@程序员喜欢猫 没有解决实际问题 这个只是把我用re的地方换了 关键是后面部分 这个返回值怎么变成中文 而不是\u数字这种模式
  • 渔父歌:可以看一下 urllib的 parse模块
    Stevent:@程序员喜欢猫 本身就是用的这个模块呀
  • 渔父歌:python可以直接解码编码后的url,不需要再转成unicode的
    Stevent:@程序员喜欢猫 是的 关键是我这个url里面有中括号,没办法直接解码,而且把中括号解决后,没办法直接返回,还没办法直接解码

本文标题:url中文转码过种记录

本文链接:https://www.haomeiwen.com/subject/ghvtmftx.html