关于乱码的问题

我之前的认知一直是乱码的原因是编码和解码的方式没有对应,所谓三码合一的问题,存在计算机底层的数据都是二进制的形式,但是今天在看廖雪峰的教程时写道:
https://www.liaoxuefeng.com/wiki/1016959663602400/1017075323632896

在这里插入图片描述

在这里插入图片描述
*搞清楚了ASCII、Unicode和UTF-8的关系,我们就可以总结一下现在计算机系统通用的字符编码工作方式:

在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。

用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件:

但既然utf-8节省空间,为什么底层存储要用unicode编码呢?

链接:https://www.zhhu.com/question/52346583/answer/130139771

在保存和传输文本的时候,用UTF-8很多,是因为对于大量以拉丁字母等ANSI字符为主的文献,UTF-8非常节省空间。但计算机处理文本的时候,内存中一般都不用UTF-8。因为UTF-8是变长编码,不从头扫描一遍,你不知道第几个字符在哪个位置上,这在处理的时候非常浪费时间。现在很多语言/程序的处理办法,是使用源于原始UTF-16的一个定长编码,只处理字符码在16位以内的字符,不支持超过16位的罕见字。这种16位定长的编码方式被称为UCS-2。那些零星的几个突破16位的字符,除非你专门研究古文或者奇怪的小语种,一般来说是遇不到的。遇到了也是黑人问号脸。比如,还有。嗯,我提交后就发现知乎后台就不幸被我命中,无力处理这两个扩展汉字,于是只好编辑一下,用图来表示他们。他们是以及能处理所有Unicode字符的语言/程序也是有不少的。不怕浪费空间的,就用UTF-32,不怕浪费处理时间的,就用完整的UTF-16,或者索性用UTF-8。

在最新的Python 3版本中,字符串是以Unicode编码的,也就是说,Python的字符串支持多语言

在操作字符串时,我们经常遇到str和bytes的互相转换。为了避免乱码问题,应当始终坚持使用UTF-8编码对str和bytes进行转换。

由于Python源代码也是一个文本文件,所以,当你的源代码中包含中文的时候,在保存源代码时,就需要务必指定保存为UTF-8编码。当Python解释器读取源代码时,为了让它按UTF-8编码读取,

我们通常在文件开头写上这两行

#!/usr/bin/env python3
# -- coding: utf-8 --

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值