zoukankan      html  css  js  c++  java
  • 字符编码

    为了解决存储和网络的传输的问题,出现了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.操作系统的语言设置

  • 相关阅读:
    5 年,只为了一个更好的校验框架
    springboot 中 inputStream 神秘消失之谜
    没啥用的黑科技——自动生成测试对象信息框架
    投资中最简单的事
    一个提升英文单词拼写检测性能 1000 倍的算法?
    基于 junit5 实现 junitperf 源码分析
    关于 junit4 90% 的人都不知道的特性,详解 junitperf 的实现原理
    性能测试到底该怎么做?
    从代码生成说起,带你深入理解 mybatis generator 源码
    java 实现中英文拼写检查和错误纠正?可我只会写 CRUD 啊!
  • 原文地址:https://www.cnblogs.com/zjaiccn/p/12909577.html
Copyright © 2011-2022 走看看