Python从入门到放弃之字符编码

字符编码储备知识


字符串类型、文本文件的内容都是由字符组成的,'但凡涉及到字符的存取,都需要考虑字符编码的问题'

# 1、软件运行前,软件的代码及其相关数据都是存放于硬盘中的

# 2、任何软件的启动都是将数据从硬盘中读入内存,然后cpu从内存中取出指令并执行

# 3、软件运行过程中产生的数据最先都是存放于内存中的,若想永久保存软件产生的数据,则需要将数据由内存写入硬盘


文本编辑器读取文件内容的流程
阶段1、启动一个文件编辑器(文本编辑器如nodepad++,pycharm,word)

阶段2、文件编辑器会将文件内容从硬盘读入内存

阶段3、文本编辑器会将刚刚读入内存中的内容显示到屏幕上
 

 字符编码介绍


# 字符编码它的前提:它只跟字符类型和文本类型相关,跟视频文件、音频文件、图片文件等无关

计算机内部只能够认识二进制01,计算机之所以能够认识各种各样的字符,那是因为计算机的内部维护着一张字符编码表

字符编码表:一些字符和数字之间的对应关系!
 

字符编码的发展史


1. 一家独大


    计算机最开始是美国人研究的,他们想让计算机能够识别英文字符
     内部维护的是一张ASCII码表:
            # 它的内部是英文字符和数字之间的对应关系
            它统一使用的是一个字节保存一个字符:一个字节8位
            """
                8位二进制能够表示多少个字符?
                    2 ** 8 == 256 
                为什么使用8位来表示?
                    方便后续添加字符
            """
     记忆:
        A-Z: 65-96
        a-z: 97-
        0-9: 48-

2. 诸侯割据、天下大乱、群雄割据


    中国人也想使用计算机,但是ASCII码表内部没有中文字符
        GBK码表:它的内部记录了英文、中文和数字之间的对应关系
            # 它使用两个字节及以上自己来保存中文字符
            """
                2 ** 16 == 65535
            """
    日本人就为了让计算机识别他们的日文字符,也研究了一套字符编码表
         # Shift_JIS表:只有日文字符、英文字符与数字的一一对应关系
     韩国人也向让计算机能够识别韩文字符,所以也研究了一套字符编码表
        #  Euc-kr表:只有韩文字符、英文字符与数字的一一对应关系
    ...


3. 天下一统


    为了让全世界的人都能够统一使用计算机识别全世界的语言,把字符编码表统一了
    unicode(万国码)
        # 统一使用的是2个字节来保存字符
        如果是英文字符----》1个字节保存一个英文字符------》万国码中使用2个字节保存英文字符----》
        就造成了空间的浪费
        


 优化


    从内存中得万国码到硬盘中得utf-8字符
    utf-8就是目前大家统一使用的一种编码:
        1. 它统一使用一个字节来保存英文字符
        2. 统一使用三个字节来保存中文字符
        """在utf-8编码表中,一个汉字使用的是三个字节!!!"""
    utf系列:
        utf-8
        utf-16
        utf-...
        
        utf8mb4: 它能够存储表情
 

字符编码的实战


1. 如何解决乱码问题?


    你在写文件的时候使用的是什么编码,那么你打开的时候就使用对应编码解码就行

2. Python解释器版本不同代码的编码问题


    """
        在python2中使用的编码表不是utf-8,而是ASCII码表
            # coding:utf-8
        
        """它使用的是ASCII码表"""
            # 在Python2 中如何定义中文字符
            s = u'你好'
            print s
    """


3. 如何编码和解码


    编码:把人类能够读懂的字符转化为计算机能够识别的数字(二进制)
    解码:把计算机能够读懂的数字转化为人类能够读懂的字符


    # 编码


    # res = '面对变化,接受无常,放过自己'
    # print(res.encode('utf-8')) 


    # 解码


    res1 = res.encode('utf-8')
    print(res1.decode('utf-8'))

    """如果遇到解码的时候,你不指定使用什么编码进行解码,你就试:utf-8 gbk"""

    # 扩展


    res2 = 'hello world'
    print(res2.encode('utf-8'))
    # print(b'hello world')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值