• 字符编码


    Python-08

    @(Python)

    字符编码

    什么是字符编表

    • 把人类的字符,解释为计算机能识别的二进制,这种转换遵循的标准就是字符编码表
    • 字符编码表记录了人类字符与数字的对应关系

    字符编码表的种类和使用

    ASCII编码表

    • ASCII编码表用于,英文和二进制的对照关系,存取都是以ASCII格式的二进制存取
    • 一个英文字母占8bit
    • ASCII编码表只能解释英文符号

    GBK编码表

    • GBK编码表用于,中文和二进制的对照关系,存取都是以GBK格式的二进制存取
    • 一个中文符号占16bit,一个英文字母占8bit
    • GBK编码表只能解释中、英文符号

    unicode编码表

    • unicode编码格式,可以跟其他所有的编码格式互相转码
    • unicode编码只在内存中使用,目前所有编码字符的字符在内存中都是以unicode格式的二进制形式呈现,并且只有unicode在内存中,其他字符编码都在硬盘上
    • unicode把全世界的字符都建立好对应关系,保证了在内存中不出现乱码
    • unicode的好处是可以跨平台,在任何平台打印都不会乱码
    • unicode使用2Bytes(16bit)表示一个字符,缺点是小于2Bytes的字符也会占用2Bytes的空间(不足16bit的用0补齐)
    • unicode编码表和其他字符编码表的对应关系,如下图:

    Alt text

    utf-8编码表

    • utf-8英文全称 unicode tranform format-8,是unicode编码表的转换版本
    • 作用是,解决了unicode占用空间的缺点,将内存中unicode编码后的二进制,更节省空间的存入磁盘
    • utf-8编码表没有和各个国家的对应关系,因此内存中不用utf-8
    • utf-81Bytes表示英文,用3Bytes表示中文

    总结:

    • 因为历史原因,各个国家为了用自己的语言使用计算机,都有自己编码表,为了进行统一,出现了unicode编码来进行过度,utf-8编码表用来逐步代替其他的编码表

    乱码的原因是什么?

    • 存的时候是以A编码格式存,读的时候用B编码格式读,就会出现乱码

    如何避免乱码?

    • 要保证存取文件不乱码,应该开始用什么编码存的,以后就用什么编码读

    Python2和Python3在字符编码上的区别

    • Python3解释器默认的字符编码是UTF-8
    • Python2解释器默认的字符编码是ASCII
    • python2会根据文件头编码的格式,将变量值存到内存,如果想要存为unicode就需要在变量值前加u,比如x=u'a'u代表unicode
    • Python3不管文件头是什么编码格式,都会转化为unicode存放在内存中

    如何指定编码文件头

    • 文件开头格式:#coding:当初存的时候的编码 的形式,比如#coding:gbk 指定读的时候用什么编码读
    • Linux中使用#!/usr/bin/env python

    python2中查看值在内存中,实际存为的十六进制(都是二进制,以十六进制显示)

    Alt text

    在Python2中有两种字符串编码格式

    • unicode格式:x=u'上'
    • unicode编码后的结果,如果文件头为#coding:utf-8,那么'上'被存为utf-8格式
    • 在Python3中只有一种字符串编码格式:unicode格式:x='上'

    内存中固定使用unicode编码,唯一能改变的是存储到硬盘时

    编码与解码

    • 编码形式:unicode --- encode编码 ---> gbkunicode只能编码,不能解码
    • 解码形式:unicode <--- decode解码 --- gbk

    Alt text

    总结

    Python2总结:

    • 在Python2中的字符串类型str都是unicode按照文件头的指定的编码,编码之后的结果
    • 在Python2中也可以制造unicode编码的字符串,需要在字符串前加u

    Python3总结:

    • 在Python3中的字符串类型str都是unicode编码的
    • 所以Python3中的字符串类型可以编码成其他字符编码格式,编码的结果是bytes类型
    • Python3中要从内存写入硬盘,必须要从unicode转化成bytes类型,即只有其他编码格式才能在硬盘上保存

    • bytes可以当成二进制看
    • 字符编码只和文本文件有关,与视频、音频、图片等文件无关
  • 相关阅读:
    ABP文档翻译--值对象
    (转)SqlServer 数据库同步的两种方式 (发布、订阅),主从数据库之间的同步
    Sql Service 的job作业新建过程
    Python --- pyinstaller --- 打包成exe并更换图标
    基于树形检测器的多标志识别
    记录 TypeError: render() got an unexpected keyword argument 'renderer' 错误
    Dockerfile 关键字
    Go new 和 make的区别
    Go的数据类型
    Mac Go 环境变量配置
  • 原文地址:https://www.cnblogs.com/itone/p/9443593.html
Copyright © 2020-2023  润新知