|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 z5560636 于 2021-12-28 12:56 编辑
现在重新遇到了问题。
直接用get 获取到的数据是被系统层 使用utf8转义过的了
第一阶段,未转意的字符串:
- str1 = {"Content-Type": "=?unknown-8bit?q?application/octet-stream=3B?==?unknown-8bit?b?IG5hbWU9IjEyNjO1xNTa1sbGt9DFz6K749fcLnhsc3gi?="}
复制代码
第二阶段,转义后的字符串:
- str2 = "1263\udcb5\udcc4\udcd4\udcda\udcd6\udcc6\udcc6\udcb7\udcd0\udcc5\udccf\udca2\udcbb\udce3\udcd7\udcdc.xlsx"
- # 实际上只是对 IG5hbWU9IjEyNjO1xNTa1sbGt9DFz6K749fcLnhsc3gi 进行了编码转换
复制代码
现在已知的解决方案是:
1. str2 \udc 替换成 \x
2. str2 转换成字节型,或者直接输出 str2.decode("gbk") 即可完成编码转换
以下是对应示例:
- print(b'1263\xb5\xc4\xd4\xda\xd6\xc6\xc6\xb7\xba\xcd\xd0\xbe\xc6\xac\xbf\xe2\xb4\xe6\xd0\xc5\xcf\xa2\xbb\xe3\xd7\xdc'.decode("gbk"))
复制代码
大佬们,请问我应该怎么写? 请大佬们附上能正确运行的代码,让小弟学习以下。
本帖最后由 hrpzcf 于 2021-12-28 15:38 编辑
- def cvtudc(udcstr: str) -> str:
- udc, start = "\\udc", 0
- udcstr = repr(udcstr).strip("'")
- max_i = len(udcstr) - 1
- while True:
- u1 = udcstr.find(udc, start)
- if u1 == -1 or u1 + 1 > max_i or u1 + 4 > max_i:
- break
- start = u1 + 1
- u2 = udcstr.find(udc, start)
- if u2 == -1 or u2 + 4 > max_i or u2 + 6 > max_i:
- break
- b1 = udcstr[u1 + 4 : u2]
- b2 = udcstr[u2 + 4 : u2 + 6]
- new = bytes([int(b1, 16), int(b2, 16)]).decode("gbk")
- udcstr = udcstr.replace(udcstr[u1 : u2 + 6], new, 1)
- return udcstr
- # 使用cvtudc函数来把str2转换成可读字符串,理论上像str2的字符串,都可以用cvtudc来转
- str2 = "1263\udcb5\udcc4\udcd4\udcda\udcd6\udcc6\udcc6\udcb7\udcd0\udcc5\udccf\udca2\udcbb\udce3\udcd7\udcdc.xlsx"
- print(cvtudc(str2)) # 结果:1263的在制品信息汇总.xlsx
复制代码
|
|