订阅内容解码失败(非base64码)_编码、解码

以Python2和Python3为例:

1f83f1df2e57263980119bc624f262d6.png
图1 有点懵

在说编码、解码的概念之前,我们先说一下,写代码执行代码的区别.

以Python2实验

1. 写代码

如果我说,我们写的代码首先是以二进制01的形式存储在硬盘中的,你可能会认为我说的就是废话,不管是何种形式的编码规则(ASCII编码、GB2312编码、GBK编码、FB18030编码、UTF-8编码)对字符进行编码,最后在计算机硬盘中存放的形式都是01形式,关键是以什么样的方式(编码)变成二进制,如果你真的这样想,那么你是对的,哈哈.(注:后面都用十六进制来表示在硬盘和内存中的存放形式,这样比较容易观察.)

如果你用Pychram软件编写的Python代码,默认是以UTF-8编码形成的01形式存放在硬盘中,VS code亦是如此,如图2所示:

669d074d67eeecab5eeeaa3824d14cd3.png
图2 VS code界面

2. 运行代码

那运行代码又是怎么回事呢?

239be3251a07602e5f429712864a9d24.png
图3 写代码与运行代码

前面我们说过,在用Pychram软件写Python代码是以UTF-8编码形成的01形式存储在硬盘,如果用Python2运行代码,就会将代码转换成ASCII码加载进内存,如果用Python3运行代码,就会将代码转换成Unicode的形式加载进内存.

我们利用python2来写一个实验:

a = 'hello'
print a

输出结果:hello

a9fbcda0fec33222a412f3f54c4fae4b.png
图4 print a

通过Pychram运行代码没有任何问题,那么,这段代码从运行结束之后,到底发生了一个怎样的过程呢?

c36d698c15263a68511982be0cbdeaae.png
图5 执行代码

分析:如图5所示,"hello"字符串先以UTF-8码存储在硬盘中(这个编码规则是取决于编写代码的软件,这里用的是Pycharm),然后UTF-8码转换为ASCII码加载进内存(各种编码只要有对方的字符,都有一个转换公式,这个不要太过纠结,还有一点说明,UTF-8码是向下兼容ASCII码).

可能有人要问了,你怎么通过这个例子就能证明是转换成ASCII码加载进内存的呢?说的很好,确实不能证明,仔细观看图5就会发现,加载进内存中的编码与硬盘中的编码都是x68x656c6f,在内存中也完全有可能是UTF-8码,根本就没有发生变化.

既然如此,我们换个打印对象,换成'你好'这个字符串.

实验:

a = '你好'
print a

输出结果出错(SytaxError: Non-ASCII character 'xe4' in file...)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值