• python之字符编码的重要思想


    #1、保证不乱码的核心法则就是,字符按照什么标准而编码的,就要按照什么标准解码,此处的标准指的就是字符编码
    
    #2、在内存中写的所有字符,一视同仁,都是unicode编码,比如我们打开编辑器,输入一个“你”,我们并不能说“你”就是一个汉字,此时它仅仅只是一个符号,该符号可能很多国家都在使用,根据我们使用的输入法不同这个字的样式可能也不太一样。只有在我们往硬盘保存或者基于网络传输时,才能确定”你“到底是一个汉字,还是一个日本字,这就是unicode转换成其他编码格式的过程了

            unicode----->encode-------->utf-8

                           utf-8-------->decode---------->unicode

    #补充:
    
    浏览网页的时候,服务器会把动态生成的Unicode内容转换为UTF-8再传输到浏览器
    
    如果服务端encode的编码格式是utf-8, 客户端内存中收到的也是utf-8编码的结果。
    内存的编码使用unicode,不代表内存中全都是unicode,
    
    在程序执行之前,内存中确实都是unicode,比如从文件中读取了一行x="egon",其中的x,等号,引号,地位都一样,都是普通字符而已,都是以unicode的格式存放于内存中的
    
    但是程序在执行过程中,会申请内存(与程序代码所存在的内存是俩个空间)用来存放python的数据类型的值,而python的字符串类型又涉及到了字符的概念
    
    比如x="egon",会被python解释器识别为字符串,会申请内存空间来存放字符串类型的值,至于该字符串类型的值被识别成何种编码存放,这就与python解释器的有关了,而python2与python3的字符串类型又有所不同。 

    二 在python3 中也有两种字符串类型str和bytes

    str是unicode

    复制代码
    #coding:gbk
    x='上' #当程序执行时,无需加u,'上'也会被以unicode形式保存新的内存空间中,
    
    print(type(x)) #<class 'str'>
    
    #x可以直接encode成任意编码格式
    print(x.encode('gbk')) #b'xc9xcf'
    print(type(x.encode('gbk'))) #<class 'bytes'>
    复制代码

    很重要的一点是:看到python3中x.encode('gbk') 的结果xc9xcf正是python2中的str类型的值,而在python3是bytes类型,在python2中则是str类型

    于是我有一个大胆的推测:python2中的str类型就是python3的bytes类型,于是我查看python2的str()源码,发现

  • 相关阅读:
    Table Scan, Index Scan, Index Seek
    Ndo v3.1发布了!
    手动建立强类型DataSet
    <.NET分布式应用程序开发>读书笔记 第十章:Q&A
    HQL语法大全
    IT人才最容易犯的几个错误
    在线查询Windows API
    ODP.NET和System.Data.OracleClient的一些不同
    给PDF文件添加链接和书签
    cegui0.6.0的下载、安装、配置及samples浏览
  • 原文地址:https://www.cnblogs.com/pyyu/p/7886181.html
Copyright © 2020-2023  润新知