• Python3 到底什么是字符编码


    我之前老是有这种感觉, 就是明明已经看过很多关于字符编码的资料了, 感觉字符编码相关的知识点不难理解, 觉得自己已经把字符编码给弄懂了, 但当别人问我到底什么是字符编码, Unicode是什么啊, UTF-8又是什么的时候, 我又结结巴巴的说不清楚, 或者只能给个含糊不清的回答, 老是把相关的知识点给弄混. 所以这篇博客, 就是要把字符编码给真正的搞懂, 把相关的知识点梳理清楚.

    到底什么是字! 符! 编! 码?!!!

    我们所理解的"字符编码(名词)"包含两个部分: 
    	1.字符集
    	2.编码规则
    	
    字符集, 做了什么事情呢? 其实就是给一个字符指定一个数字编号, 
    就像我们每个人都会有一个身份证号一样, 通过一个身份证号可以对应某一个人, 
    那我们通过数字编号, 就可以对应到某个具体的字符了
    所以, 简单来说, 字符集就相当于一个大的数据库, 这个数据库中包含了两个字段(列): 字符, 和字符对应的编号	
    +------+----------+
    | 字符 |    编号   |
    +------+----------+
    |   a  |     97   |
    +------+----------+
    |   b  |     98   |
    +------+----------+
    
    编码规则, 就是如何对"字符的编号"进行编码的一种规则, 比如我们现在要将字母 "a" 保存到硬盘中, 
    "a"对应的编号是97, 所以我们只要保存97就行了, 按照ASCII的编码规则, 使用8位二进制数(第1位二进制为0)来进行编码, 
    97在经过编码后的存储格式就为01100001
    

    为什么要有字符编码?

    归根结底, 计算机只认识0和1(二进制), 不是0和1的数字, 我们可以通过位数转换, 转换成二进制
    那对于字符, 计算机要怎么识别呢?
    将每个字符都指定一个数字编号(字符集), 再将数字编号转为二进制(编码规则), 这样计算机就能识别了
    

    Unicode与UTF-8

    首先, Unicode也是包含两个部分: 字符集+编码规则
    你可以将Unicode字符集理解为是包含了全世界大多数语言字符与字符编号的超大数据库
    而UTF-8就是Unicode的一种编码规则, 除了UTF-8, 还有UTF-16、UTF-32等编码规则
    	UTF-32: 不管你的编号是多少, 即使是1, 我都给你转为用32位的二进制: 00000000 00000000 00000000 00000001
    	UTF-16: 能转为16位就转为16位, 16位不够就转为32位
    	UTF-8: 能转为8位就转8位, 8位不够就转16位,  16位不够就转24位, 24位不够转32位
    

    Python2和Python3中的字符编码

    python2默认字符编码是ASCII, 当你用python2的解释器去运行你写好的py2代码(硬盘中), 
    解释器会用ASCII的编码规则去读取, 由于ACSII编码不支持中文, 
    所以我们一般在py2代码首行: #encoding: utf-8来指定字符编码规则为utf-8
    
    python3默认的字符编码是Unicode, 当你用python3的解释器去执行你写好的py3代码(硬盘中), 
    解释器会用UTF-8编码规则来读取
    

    Python2和Python3中的字符串

    python2中的字符串的str和unicode类型
    	name = "bigb"  (就是py3中的bytes类型)
    	name = u"bigb" (就是py3中的str类型)
    	
    python3中的字符串的str和bytes类型
    	name = "bigb"
    	name = b"bigb"
    

    注:

    只是对相关概念做了简单阐述, 目的是理清字符编码的相关知识点, 如果对字符编码有深入了解的需求, 请自行查阅相关资料

  • 相关阅读:
    day 05 讲解java三大特性
    day 02 运算符
    石大 6-9 待提交
    poj分类
    NLog使用总结
    VS 2010下单元测试
    MQTT----物联网常用的消息队列协议
    使用jfreechart生成柱状图、折线图、和饼状图
    JavaBean持久化
    使用maven搭建springMVC开发环境
  • 原文地址:https://www.cnblogs.com/bigb/p/12114685.html
Copyright © 2020-2023  润新知