python入门day10——字符编码

字符编码

1、储备知识

       1、程序运行与三大核心硬件的关系:CPU、内存、硬盘
              程序最先放在硬盘中,程序的运行是先把程序的代码从硬盘读入内存,然后cpu从内存读取指令然后运行
       2、程序运行过程中产生的数据最先放在内存中
       python3、程序运行的三个步骤
              python3 D:\a.py
              1、先启动python解释器
              2、解释器会将a.py的内容当成普通内存从硬盘读入内存,此时没有语法意义
              3、解释器会解释执行刚刚读入内存的内存,开始识别python语法
       4、文件的后缀名是干嘛的
              文件的后缀名仅仅是给人看的 因为对应计算机来说所有的数据都是0101010的二进制
       5、普通的文本编辑器和python解释器的工作流程
       相同
              1.任何的程序要想运行都是先从硬盘读取到内存
              2.文本编辑器和python解释器都会去硬盘中读取你想要读取的文件内容
       不同
              3.文本编辑器将文件内容读取之后仅仅是展示给用户看
              而我们的python解释器会识别语法并执行python代码

2、什么是字符编码

       字符编码表:存放的是字符与数字的对应关系
       字符---------(标准)---------------数字
       字符编码研究的范围只针对文本文件 音频、视频这些不包含在内

3、字符编码的发展史

       一家独大
              计算机起源于美国,美国人用英文交流,但是计算机只能识别二进制数据,为了能够让计算机识别人类能够读懂的字符,这里面肯定有一个中间的字符与数字的对应关系,其实就是一张表:ASCII码表。这张表只记录了英文和数字的对应关系。用8位(bit)来表示一个英文字符。

        1bytes = 8bit
        1024bytes = 1KB
        1024KB = 1MB
        1024MB = 1GB

       ASCII:只能识别英文字符
       特点:采用8bit对应一个英文字符

       群雄割据
              中国人也用得起计算机,自己做一个汉字跟数字对应关系:GBK表。汉字、英文 跟数字的对应
1bytes来表示英文,2bytes来表示汉字,如果出现了生僻字可能还需要用3bytes甚至跟多的bytes。
       GBK表:可以识别中文字符串与英文字符
       特点:采用16bit对应字符,该字符可以是英文字符、也可以是中文字符

       日本人也用得起计算机,自己做一个汉字跟数字对应关系 shift_JIS,shift_JIS表:日文、英文 跟数字的对应
       韩国人也用得起计算机,自己做一个汉字跟数字对应关系 Euc_kr,Euc_kr表:韩文、英文 跟数字的对应

       我们在输入中文字符的时候
              1.内部基于GBK翻译成了对应的二进制数据 在内存
              2.然后将基于GBK编码的二进制数据刷到硬盘 永久保存
              3.将硬盘中基于GBK编码的二进制数据读取到内存之后按照GBK编码的对应关系翻译成对应的中文

       天下一统
       万国码 unicode,兼容万国,并且跟之前所有国家的编码都有对应关系,1990开始研究的 1994年才开始正式使用。
       所有的字符都是用2bytes来存储,英文用2bytes,中文也用2bytes。

                         内存
        人类的字符---------unicode格式的数字----------
                             |                     |
                             |                     |
                             |
                            硬盘                    |
                             |
                             |                     |
                             |                     |
                        GBK格式的二进制       Shift-JIS格式的二进制

        老的字符编码都可以转换成unicode,但是不能通过unicode互转
        
        
        中文字符、英文字符————————————》unicode二进制数——————————》gbk二进制
        日文字符、英文字符————————————》unicode二进制数——————————》shiftJIS二进制
        韩文字符、英文字符————————————》unicode二进制数——————————》Eu-kr二进制
        万国字符————————————》unicode二进制————————————》utf-8二进制数

4、utf-8

       1Byte 对应 英文字符
       3Byte 对应 一个中文字符

群雄割据:
英文字符————————————内存:ASCII二进制数————————————》硬盘:ASCII二进制数
中文英文字符————————————内存:GBK二进制数————————————》硬盘:GBK二进制数
日文英文字符————————————内存:shiftJIS二进制数————————————》硬盘:shiftJIS二进制数
韩文英文字符————————————内存:Euc-Kr二进制数————————————》硬盘:Euc-Kr二进制数

过渡阶段:
中文英文字符————————————内存:unicode—————GBK———————》硬盘:GBK二进制数
日文英文字符————————————内存:unicode—————shiftJIS———————》硬盘:shiftJIS二进制数
韩文英文字符————————————内存:unicode—————Euc-Kr———————》硬盘:Euc-Kr二进制数
万国字符———————————————内存:unicode—————utf-8———————》硬盘:utf-8二进制数

内存固定使用:unicode
我们可以改变的是从内存写入硬盘时采用的编码格式


分久必合
万国字符———————————————内存:unicode—————utf-8———————》硬盘:utf-8二进制数
万国字符———————————————内存:utf-8———————————————————》硬盘:utf-8二进制数

5、乱码问题

       1、存的时候乱了:采用的字符编码表无法识别输入的字符
       存的时候就已经乱了,是无法补救的,取得时候一定也乱了
       解决方法:存入硬盘的编码格式应该用utf-8格式
       2、存的时候没有乱码:采用的字符编码表可以识别输入的字符
       但是取得时候乱码了:采用的字符编码表与当初存的时候用的不是同一张表
       解决方法:存的时候用什么编码取得时候就一定要用同样的编码格式

6、与运行pyhton程序有关的乱码问题

       1、保证运行python程序的前两个阶段不乱吗
              在python文件的开头加一行:
                     #coding: 文件存的时候用的编码格式如: #coding:GBK

       2、保证第三个阶段不乱吗
              使用python3
                     如果使用的是python2,应该在字符串前加前缀u 如x=u’上’

6、编码解码:

字符——————编码——————》unicode格式的数字——————编码——————》gbk格式的数字
字符——————解码——————》unicode格式的数字《——————解码——————gbk格式的数字

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值