鱼C论坛

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

[技术交流] 转码随笔:

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

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

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

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

一、unicode 转str


  1. s="\u5e7402\u670809\u65e5"
  2. print(s.encode(encoding="utf-8").decode(encoding="utf-8"))
  3. #年02月09日
  4. 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"
  5. print(title.encode(encoding="utf-8").decode(encoding="utf-8"))
  6. #农村里这三个账要清了,全部都要严查,和每个农村人都有关系
  7. 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"
  8. print(title.encode(encoding="utf-8").decode(encoding="utf-8"))
  9. #世界最“稀有”的猩猩,全身不长一根毛发,女游客:看了真是尴尬
复制代码


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


三、关于 str   unicode  bytes  补充几个测试    

  1. t="中华人民共和国"
  2. print(t.encode("unicode_escape"))
  3. # 输出:b'\\u4e2d\\u534e\\u4eba\\u6c11\\u5171\\u548c\\u56fd'
  4. print(t.encode("utf-8"))
  5. #输出:b'\xe4\xb8\xad\xe5\x8d\x8e\xe4\xba\xba\xe6\xb0\x91\xe5\x85\xb1\xe5\x92\x8c\xe5\x9b\xbd'

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

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

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

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


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

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

复制代码


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

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

  1. import urllib.request

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

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

  9. s="%5B%22sc%22%2C%22hd%22%5D%7B"
  10. sz=requests.utils.unquote(s)  
  11. print(sz)
  12. #实测,和urlib.parse返回结果一致
  13. #["sc","hd"]{
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

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

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





总结:凡是bytes型数据,都可以直接decode   凡是str型数据 均需先encode再decode
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-8 14:33:41 From FishC Mobile | 显示全部楼层
我顶
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-6 14:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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