鱼C论坛

 找回密码
 立即注册
查看: 1267|回复: 2

[技术交流] 转码随笔:

[复制链接]
发表于 2020-3-8 09:50:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 wp231957 于 2020-3-8 11:11 编辑

一、unicode 转str

s="\u5e7402\u670809\u65e5"
print(s.encode(encoding="utf-8").decode(encoding="utf-8"))
#年02月09日
title="\u519c\u6751\u91cc\u8fd9\u4e09\u4e2a\u8d26\u8981\u6e05\u4e86\uff0c\u5168\u90e8\u90fd\u8981\u4e25\u67e5\uff0c\u548c\u6bcf\u4e2a\u519c\u6751\u4eba\u90fd\u6709\u5173\u7cfb"
print(title.encode(encoding="utf-8").decode(encoding="utf-8"))
#农村里这三个账要清了,全部都要严查,和每个农村人都有关系
title="\u4e16\u754c\u6700\u201c\u7a00\u6709\u201d\u7684\u7329\u7329\uff0c\u5168\u8eab\u4e0d\u957f\u4e00\u6839\u6bdb\u53d1\uff0c\u5973\u6e38\u5ba2\uff1a\u770b\u4e86\u771f\u662f\u5c34\u5c2c"
print(title.encode(encoding="utf-8").decode(encoding="utf-8"))
#世界最“稀有”的猩猩,全身不长一根毛发,女游客:看了真是尴尬

二、反向转换呢 str转unicode    当然也能实现了
title="世界最“稀有”的猩猩,全身不长一根毛发,女游客:看了真是尴尬"
print(title.encode("unicode_escape"))
#b'\\u4e16\\u754c\\u6700\\u201c\\u7a00\\u6709\\u201d\\u7684\\u7329\\u7329\\uff0c\
#   \u5168\\u8eab\\u4e0d\\u957f\\u4e00\\u6839\\u6bdb\\u53d1\\uff0c\\u5973\\u6e38\\u5ba2
#    \\uff1a\\u770b\\u4e86\\u771f\\u662f\\u5c34\\u5c2c'
#原来这是一个<class 'bytes'>

三、关于 str   unicode  bytes  补充几个测试    
t="中华人民共和国"
print(t.encode("unicode_escape")) 
# 输出:b'\\u4e2d\\u534e\\u4eba\\u6c11\\u5171\\u548c\\u56fd'
print(t.encode("utf-8"))
#输出:b'\xe4\xb8\xad\xe5\x8d\x8e\xe4\xba\xba\xe6\xb0\x91\xe5\x85\xb1\xe5\x92\x8c\xe5\x9b\xbd'

x=b'\xe4\xb8\xad\xe5\x8d\x8e\xe4\xba\xba\xe6\xb0\x91\xe5\x85\xb1\xe5\x92\x8c\xe5\x9b\xbd'
print(x.decode(encoding="utf-8"))
#输出:中华人民共和国

s='\u4e2d\u534e\u4eba\u6c11\u5171\u548c\u56fd'
print(s.encode(encoding="utf-8").decode(encoding="utf-8"))
#输出:中华人民共和国

s=b'\u4e2d\u534e\u4eba\u6c11\u5171\u548c\u56fd'
print(s.decode(encoding="unicode_escape"))
#输出:中华人民共和国

s='\\u4e2d\\u534e\\u4eba\\u6c11\\u5171\\u548c\\u56fd'
print(s.encode(encoding="utf-8").decode(encoding="utf-8"))
#输出:\u4e2d\u534e\u4eba\u6c11\u5171\u548c\u56fd


s='\\u4e2d\\u534e\\u4eba\\u6c11\\u5171\\u548c\\u56fd'
print(s.encode(encoding="utf-8").decode(encoding="unicode_escape"))
#输出:中华人民共和国

s=b'\\u4e2d\\u534e\\u4eba\\u6c11\\u5171\\u548c\\u56fd'
print(s.decode(encoding="unicode_escape"))
#输出:中华人民共和国

四、相信大家对于类似%5B%22sc%22%2C%22hd%22%5D%7B 这样的串串不陌生吧
下面贴出解码。这个串串的编码相对就简单了一些,就不贴测试了,对 把unquote的前缀去掉就可以了
   

# 浏览器地址栏中的参数的转码
# javascript代码
  # list="%5B%22sc%22%2C%22hd%22%5D%7B";
  # console.log(unescape(list));
import urllib.request

s="%5B%22sc%22%2C%22hd%22%5D%7B" 
sz=urllib.parse.unquote(s)  
print(sz)
#实测,和js代码返回结果一致
#["sc","hd"]{

#好吧,本来就不想使用urllib这个库呢,那么requests里是否有quote/unquote呢
import requests

s="%5B%22sc%22%2C%22hd%22%5D%7B" 
sz=requests.utils.unquote(s)  
print(sz)
#实测,和urlib.parse返回结果一致
#["sc","hd"]{
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-3-8 14:21:04 | 显示全部楼层
本帖最后由 wp231957 于 2020-3-8 14:27 编辑

五、有一个转换特例,单独标注一下:(hex型串 转中文)

备注:网上所有可以直接decode的 在python3.x 下均不能用,因为3.x下 str类型不支持decode
x='\xe4\xb8\xad\xe5\x8d\x8e\xe4\xba\xba\xe6\xb0\x91\xe5\x85\xb1\xe5\x92\x8c\xe5\x9b\xbd'
print(x.encode("raw_unicode_escape").decode(encoding="utf-8"))
#输出:中华人民共和国




总结:凡是bytes型数据,都可以直接decode   凡是str型数据 均需先encode再decode
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-8 14:33:41 From FishC Mobile | 显示全部楼层
我顶
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-23 11:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表