zoukankan      html  css  js  c++  java
  • 字符编码与文本基础

    一.字符编码基础知识

     1.计算机硬件包括CPU、硬盘、内存,其中CPU负责从内存中读取指令并解码执行。

      操作系统和应用软件运行时都是先把程序加载到内存中,然后应用程序通过调用操作系统提供的接口,来间接实现硬件的使用。

        2.文本编辑器存储原理

      应用程序加载到内存中,先将编辑的内容存储在内存中,然后通过点击保存然后将文件刷到硬盘上,确保在断电后文件内容不丢失。

      3.python解释器执行python文件的原理

      第一阶段:python解释器启动,相当于开启了一个文本编辑器

      第二阶段:python解释器相当于文本编辑器,将python文件读到内存中(python解释器的特性决定了只关注文件的内容,不在意文件的后缀名)

      第三阶段:python解释器开始执行加载到内存中的代码(在执行时才会识别python的语法,比如识别到定义了一个变量,会在内存中开辟一个新的空间来存放变量。)

      python解释器之余文件编辑器的异同:

      相同:python解释器和文件编辑器一样,都有读取文件的功能

      不同:文件编辑器读入内存是为了显示,而python解释器是为了执行(识别python语法)

    二.什么是字符编码

      计算机在通电时才能工作,而计算机只认识数字(高频和低频对应二进制中的数字1和0)。

      由于人们在进行交流时都是通过一连串字符来传达意思的,为了能让计算机为人们服务,这就需要这么一个过程:

      字符------->翻译--------->数字(一个字符如何对应一个或一串特定的数字)

      以下两个场景下涉及到字符编码的问题:

      1. 一个python文件中的内容是由一堆字符组成的(python文件未执行时)

      2. python中的数据类型字符串是由一串字符组成的(python文件执行时)

    三.字符编码的发展:

      英美:ASCII码,一个Bytes代表一个字符,1Bytes=8bit

      中文:GBK码,2Bytes代表一个字符

      为了方便各种语言之间的通信,出现了万国码:Unicode码(所有字符都是2Bytes),utf-8码(对英文字符只用1Bytes表示,对中文字符用3Bytes)

      注意:

      unicode:简单粗暴,所有字符都是2Bytes,优点是字符->数字的转换速度快,缺点是占用空间大

      utf-8:精准,对不同的字符用不同的长度表示,优点是节省空间,缺点是:字符->数字的转换速度慢,因为每次都需要计算出字符需要多长的Bytes才能够准确表示   

      1.内存中使用的编码是Unicode码,采用用空间换时间的策略(所有程序都需要先加载到 内存中才能运行)

      2.硬盘中或者网络传输用utf-8,网络I/O或磁盘I/O延迟要远大于utf-8的转换延迟,而且I/0应该尽可能节省带宽,保证传输数据的稳定

    四.字符编码的使用

      1.文本编辑器.编码转换:

      unicode----->encode-------->utf-8

      utf-8-------->decode---------->unicode

      

      2.乱码的原因

      第一个:在编码时已经乱码,比如文件内容中有中文和日文,而在往硬盘存储时编码格式是gbk,那么日文就没有与之匹配的对应关系,造成无法正确存储,也就是数据损坏。

      第二个:存文件时不乱码而读文件时乱码,比如选择了和存储时不一样的编码方式,比如gbk码存储,utf-8码读取

      总结:文件以什么编码保存,就以什么编码打开

    五.程序的执行

      第一阶段:启动python解释器

      第二阶段:此时python文件解释器相当于文本编辑器,将硬盘中的文件读入到内存

      第三阶段:读取已经加载到内存中的代码(Unicode编码的二进制),然后执行,执行过程中可能会开辟新的内存空间

    六.python2和python3的区别:

      1.在python2中有两种字符串类型:str和unicode

      2.在python3中也有两种字符串类型:str和Bytes

  • 相关阅读:
    [转] Linux下crontab命令的用法
    [转] Try to use one var statement per scope in JavaScript
    [转] 主流JS框架中DOMReady事件的实现
    MySQL 表复制语句
    [转] MySQL中的运算符展示
    [转] mysql分组取每组前几条记录(排名)
    MySQL 连接结果集
    [转] mysql show processlist命令 详解
    [转] mysql 5.0存储过程学习总结
    jquery中使用event.target的几点
  • 原文地址:https://www.cnblogs.com/sxh-myblogs/p/7230738.html
Copyright © 2011-2022 走看看