zoukankan      html  css  js  c++  java
  • Ⅸ:字符编码

    一.三大核心硬件

    所有软件都是运行硬件之上的,与运行软件相关的三大核心硬件为cpu、内存、硬盘,我们需要明确三点

    #1、软件运行前,软件的代码及其相关数据都是存放于硬盘中的
    
    #2、任何软件的启动都是将数据从硬盘中读入内存,然后cpu从内存中取出指令并执行
    
    #3、软件运行过程中产生的数据最先都是存放于内存中的,若想永久保存软件产生的数据,则需要将数据由内存写入硬盘
    

    二.文本编辑器读取文件内容的流程

    #阶段1、启动一个文件编辑器(文本编辑器如nodepad++,pycharm,word)
    
    #阶段2、文件编辑器会将文件内容从硬盘读入内存
    
    #阶段3、文本编辑器会将刚刚读入内存中的内容显示到屏幕上
    

    三.python解释器执行文件的流程

    #以python test.py为例,执行流程如下
    
    #阶段1、启动python解释器,此时就相当于启动了一个文本编辑器
    
    #阶段2、python解释器相当于文本编辑器,从硬盘上将test.py的内容读入到内存中
    
    #阶段3、python解释器解释执行刚刚读入的内存的内容,开始识别python语法
    

    四.总结

    python解释器与文件本编辑的异同如下
    
    #1、相同点:前两个阶段二者完全一致,都是将硬盘中文件的内容读入内存,详解如下
    python解释器是解释执行文件内容的,因而python解释器具备读py文件的功能,这一点与文本编辑器一样
    
    #2、不同点:在阶段3时,针对内存中读入的内容处理方式不同,详解如下
    文本编辑器将文件内容读入内存后,是为了显示或者编辑,根本不去理会python的语法,而python解释器将文件内容读入内存后,可不是为了给你瞅一眼python代码写的啥,而是为了执行python代码、会识别python语法)
    

    字符编码介绍

    一.什么是字符编码?

    人类在与计算机交互时,用的都是人类能读懂的字符,如中文字符、英文字符、日文字符等
    
    而计算机只能识别二进制数,详解如下
    
    # 二进制数即由0和1组成的数字,例如010010101010。计算机是基于电工作的,电的特性即高低电平,人类从逻辑层面将高电平对应为数字1,低电平对应为数字0,这直接决定了计算机可以识别的是由0和1组成的数字
    

    字符:

    字符-------翻译-----》数字
    字符《-----翻译《-----数字
    # 字符编码表就是一张字符与数字对应关系的表
    

    二.字符编码表的发展史 (了解)

    ### 阶段一:一家独大
    ```python   
    # 现代计算机起源于美国,所以最先考虑仅仅是让计算机识别英文字符,于是诞生了ASCII表
    # ASCII表的特点:
        1、只有英文字符与数字的一一对应关系
        2、一个英文字符对应1Bytes,1Bytes=8bit,8bit最多包含256个数字,可以对应256个字符,足够表示所有英文字符
    

    阶段二:诸侯割据、天下大乱

    为了让计算机能够识别中文和英文,中国人定制了GBK

    # GBK表的特点:
        1、只有中文字符、英文字符与数字的一一对应关系
        2、一个英文字符对应1Bytes
           一个中文字符对应2Bytes   
           补充说明:
           1Bytes=8bit,8bit最多包含256个数字,可以对应256个字符,足够表示所有英文字符
           2Bytes=16bit,16bit最多包含65536个数字,可以对应65536个字符,足够表示所有中文字符
    
    # 每个国家都各自的字符,为让计算机能够识别自己国家的字符外加英文字符,各个国家都制定了自己的字符编码表
    
    # Shift_JIS表的特点:
        1、只有日文字符、英文字符与数字的一一对应关系
    
    # Euc-kr表的特点:
        1、只有韩文字符、英文字符与数字的一一对应关系
    # 此时,美国人用的计算机里使用字符编码标准是ASCII、中国人用的计算机里使用字符编码标准是GBK、日本人用的计算机里使用字符编码标准是Shift_JIS,如下图所示,
    

    文本编辑存取文件的原理如下
    
    # 文本文件内容全都为字符,无论存取都是涉及到字符编码问题
    #1、存文本文件
    人类通过文本编辑器输入的字符会被转化成ASCII格式的二进制存放于内存中,如果需要永久保存,则直接将内存中的ASCII格式的二进制写入硬盘
    
    #2、读文本文件
    直接将硬盘中的ASCII格式的二进制读入内存,然后通过ASCII表反解成英文字符
    

    阶段三:分久必合

    unicode于1990年开始研发,1994年正式公布,具备两大特点:
    
    #1. 存在所有语言中的所有字符与数字的一一对应关系,即兼容万国字符
    
    #2. 与传统的字符编码的二进制数都有对应关系,详解如下
    很多地方或老的系统、应用软件仍会采用各种各样传统的编码,这是历史遗留问题。此处需要强调:软件是存放于硬盘的,而运行软件是要将软件加载到内存的,面对硬盘中存放的各种传统编码的软件,想让我们的计算机能够将它们全都正常运行而不出现乱码,内存中必须有一种兼容万国的编码,并且该编码需要与其他编码有相对应的映射/转换关系,这就是unicode的第二大特点产生的缘由
    
    # 文本编辑器输入任何字符都是最新存在于内存中,是unicode编码的,存放于硬盘中,则可以转换成任意其他编码,只要该编码可以支持相应的字符
    
    # 英文字符可以被ASCII识别
    英文字符--->unciode格式的数字--->ASCII格式的数字
    
    # 中文字符、英文字符可以被GBK识别
    中文字符、英文字符--->unicode格式的数字--->gbk格式的数字
    
    # 日文字符、英文字符可以被shift-JIS识别
    日文字符、英文字符--->unicode格式的数字--->shift-JIS格式的数字
    
    ASCII表:
        1、只支持英文字符串
        2、采用8位二进制数对应一个英文字符串
    
    GBK表:
        1、支持英文字符、中文字符
        2、
        采用8位(8bit=1Bytes)二进制数对应一个英文字符串
        采用16位(16bit=2Bytes)二进制数对应一个中文字符串
    
    
    unicode(内存中统一使用unicode):
        1、
            兼容万国字符
            与万国字符都有对应关系
        2、
        采用16位(16bit=2Bytes)二进制数对应一个中文字符串
        个别生僻会采用4Bytes、8Bytes
    
    
        unicode表:
                              内存
            人类的字符---------unicode格式的数字----------
                                 |                     |
                                 |                     |
                                 |
                                硬盘                    |
                                 |
                                 |                     |
                                 |                     |
                            GBK格式的二进制       Shift-JIS格式的二进制
    
            老的字符编码都可以转换成unicode,但是不能通过unicode互转
    
    
    
    utf-8:
        英文->1Bytes
        汉字->3Bytes
    

    结论:

        # 1、内存固定使用unicode,我们可以改变的是存入硬盘采用格式
            # 英文+汉字-》unicode-》gbk
            # 英文+日文-》unicode-》shift-jis
            # 万国字符》-unicode-》utf-8
    
        # 2、文本文件存取乱码问题
            # 存乱了:解决方法是,编码格式应该设置成支持文件内字符串的格式
            # 取乱了:解决方法是,文件是以什么编码格式存如硬盘的,就应该以什么编码格式读入内存
    
  • 相关阅读:
    KNN 与 K
    k 近邻算法(k-Nearest Neighbor,简称kNN)
    ANN神经网络——Sigmoid 激活函数编程练习 (Python实现)
    ANN神经网络——实现异或XOR (Python实现)
    Logistic Regression 之错误翻译
    浅谈回归(二)——Regression 之历史错误翻译
    浅谈回归Regression(一)
    交叉验证 Cross validation
    Git学习-Git时光机之版本回退(二)
    ubuntu16.04安装网易云音乐
  • 原文地址:https://www.cnblogs.com/qujiu/p/12482780.html
Copyright © 2011-2022 走看看