• 字符编码


    为了解决存储和网络的传输的问题,出现了UTF,即对unicode进行转化

    Utf-8:使用1,2,3,4个字节表示所有字符,优先使用1个字符,无法满足空间则增加到2   --> 3    -- > 4

    Utf-16:使用2,4个字节表示所有字符;优先使用2个字节,否则使用4个字节表示

    Utf-32:使用4个字节表示所有字符;

    总的来说UTF是为unicode编码设计的一种在存储和传输时节省空间的编码方案;

     

    数据存到硬盘上一定是以二进制的形式存放的

    Python3执行代码的过程(Python默认文件代码就是utf8)

    1.解释器找到代码文件,把代码字符串按照文件头定义的编码加载到内存,转换成Unicode

    2.把代码字符串按照语法规则进行解释

    3.所有的变量字符都会以Unicode编码声明

    但是不是所有解释器都可以做到,Python2就不可以,既然python2并不会自动的把文件编码转换成Unicode存在内存里,那就只能使出最后一招了,

    自己人肉转,Python3自动把文件编码转成Unicode必定是调用了什么。这个方法就是,decode(解码)和encode(编码)

    Utf8 --> decode --> unicode

    Unicode --> encode --> gbk/utf8

    Python3 默认解释器编码是 utf8

             存放在内存里的字符串编码是 unicode

    Python2  默认的解释器编码是 ASCII

             存放在内存里的字符串编码是ASCII,

     如果文件头使用#! encoding : 编码名称 声明了字符编码,那字符串编码就是 声明的编码

    使用print(type(s)) 查看字符串的数据类型,这样我们就可以查看decode和encode转换后的字符串类型

    但是问题来了,如果只给你了一串乱码,你如何判断他是什么类型的字符串乱码呢?

    解决: 查看Unicode的映射表

    C9    --16进制

    12 9    

    8421 8421

    1100 1001   转成2进制  

    4 9      把8那位去掉 计算出来的就是49   去Unicode映射表里去查看,就知道使用的是什么编码了

    Python  bytes类型

    python2str = bytes ,  既然这个为什么不直接用str  原因是不光有字符串还有图片、视频等二进制格式的数据,他们是以bytes类型存放的

    utf-8编码的字符串,在windows上不能显示,因为windows默认编码是gbk。

    定义unicode类型 s = u’路’ 

    如果在Python2实现写一个软件,在全球各国的电脑上直接看?

    unicode编码    -- 全球的电脑都支持unicode

    Py2:以utf8 or gbk..编码的代码,代码内容加载到内存,并不会转成Unicode,编码依然是utf8  or gbk

            Py3:以utf8 or gbk..编码的代码,代码内容加载到内存里,会自动转换成Unicode

    Python3   str = Unicode

    编码转化是不可退的

    最后Python只要出现编码问题,无非是哪里的编码设置出错了:

    常见的编码错误的原因有:

    1.Python解释器的默认编码

    2.Python源文件文件编码

    3.Terminal使用的编码

    4.操作系统的语言设置

  • 相关阅读:
    五步搞定Android开发环境部署
    centos7安装MongoDB3.4
    java数据结构之三叉链表示的二叉树
    java数据结构之二叉树遍历的非递归实现
    java数据结构之二叉树的定义和递归实现
    java数据结构之树
    java数据结构之递归算法
    java数据结构之(堆)栈
    redis主从复制配置
    Redis 发布订阅
  • 原文地址:https://www.cnblogs.com/zjaiccn/p/12909577.html
Copyright © 2020-2023  润新知