二.字符编码

基础知识:

文本编辑器存取文件原理与py执行原理异同:

存/写:进入文本编辑器 写内容 保存后 内存数据刷到硬盘

取/读:进入文本编辑器 找到内容 从硬盘读到内存 notepad把文件内容打印到屏幕上(py启动解释器,把py当作普通文件读到内存,最后识别语法,执行)

你往文本编辑里写汉字,内存里存的是计算机能识别的二进制,按照当时写的标准(Unicode)再反解打印出来,计算机并不识别是哪国语言

字符编码:

将人类的字符转换成计算机能识别的数字,这种转换必须遵循固定的标准,人类的字符和数字的对应关系。

A-1 B-0  位数越多能表示的字符越多   当初美国人用8位( 2^8) 与英文字母对应

ASCII

1个英文字符等于8个二进制位bit 等于一个Bytes 可以表示2^8的英文字符

GBK

1个中文字符等于16个二进制位等于两个Bytes 可以表示2^16的中文字符

这个阶段不会出现乱码,因为各国都用自己的。

但是软件开始跨国使用后,硬盘上还是各国软件自己编码的二进制数字(暂时不考虑硬盘),内存里需要找到兼容万国的unicode,

与全世界的字符都建立好对应关系,用两个Bytes表示一个字符

如果直接用unicode从内存写到硬盘,对于英文来说就浪费空间了,所以需要更精简的格式UTF-8,将数据量控制到最精简,提高计算机运行效率

(UTF-8 是可变长的 每个语言都用适合自己的长度 更全面 用1个Bytes表示英文,3个Bytes表示中文)

但是为什么不能内存直接存成UTF-8 ,而是多此一举存成unicode?

unicode兼容万国  和各国语言你建立映射关系 老版本的都可以反解成unicode

UTF-8虽然兼容万国但与各国编码无对应关系 所以内存里不能放UTF-8

硬盘已经无法统一,各国软件已经在那里了,历史遗留问题,只要内存统一就行

目前达成共识,往硬盘里存UTF-8,很多很多年后,历史软件退役,硬盘里就不会有乱七八糟的各国标准了

重要结论1:

内存中固定使用unicode编码,唯一可以改变的是存储到硬盘时使用的编码

重要结论2:

要想保证存取文件不乱码,应保证文件当初以什么编码存,就以什么格式取

Unicode-编码成 gbk    gbk-解码成unicode

重要结论3:

py3默认读取文件按照UTF-8

文件头:coding="gbk"  告诉py按照你指定的编码去读文件(指定的编码应该和存的编码(py右下角显示的是存的)一致)

因为一般默认以UTF-8存,也以它取,所以通常不需要再指定,但是如果去py2运行的话就要考虑了,所以最好都指定coding="utf-8"

print() 内存丢到操作系统 当初以UTF-8  内存unicode 现在操作系统以gbk

py2里面字符串前面加u'跨平台更好 制造unicode  不加'u的话 就是Unicode按文件头指定格式的,否则按默认的ASCII

py3 只能编码  因为默认的字符串类型是unicode编码  可以编码成bytes类型

把内存的字符串写到硬盘,把内存里的unicode编码成其他可以写进硬盘里的类型,例如bytes

python基础之Day7part2 史上最清晰字符编码理解的更多相关文章

  1. 深入理解JavaScript系列:史上最清晰的JavaScript的原型讲解

    一说起JavaScript就要谈的几个问题,原型就是其中的一个.说了句大话,史上最清晰.本来是想按照大纲式的行文写一下,但写到后边感觉其实就一个概念,没有什么条理性,所以下面就简单按照概念解释的模式谈 ...

  2. python中文编码问题深入分析(一):字符编码基础

    背景:笔者作为一名刚接触python语言的新手,在实际的项目中,遇到过一些中文编码问题,初次遇到这些问题的时候,刚开始显得有些手足无措,也不知从何查起.常言道:有问题,找度娘!当我打开www.baid ...

  3. python基础(5):格式化输出、基本运算符、编码问题

    1. 格式化输出 现在有以下需求,让⽤户输入name, age, job,hobby 然后输出如下所⽰: ------------ info of Alex Li ----------- Name : ...

  4. python教程1:Python基础之数据类型和变量、字符串和编码

    视频链接:http://www.bilibili.com/video/av10730372/ 我是在Linux下玩python的,Linux下默认安装python,直接打个pyhon3就好了,pyth ...

  5. Python基础系列----语法、数据类型、变量、编码

    1.基本语法                                                                                        Python ...

  6. python基础(格式化输出、基本运算符、编码)

    1,格式化输出. 现有一练习需求,问用户的姓名.年龄.工作.爱好 ,然后打印成以下格式 ------------ info of Alex Li ----------- Name : Alex Li ...

  7. Python之路-python(set集合、文本操作、字符编码 )

    一.集合操作(set)                                                                                          ...

  8. Python 基础【二】 上

    一.python语言分类 1. C python   c语言的python版本 官方推荐 使用C语言实现,使用最为广泛,CPython实现会将源文件(py文件)转换成字节码文件(pyc文件),然后运行 ...

  9. python基础--14大内置模块(上)

    python的内置模块(重点掌握以下模块) 什么是模块 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类 ...

随机推荐

  1. 从头调试stm32 HID

    目录: 第1部分:参照“正点原子USB虚拟串口工程移植步骤”移植ST的USB HID工程(失败了): 第2部分:在1的基础上,替换USB HID初始化代码为ST 例程中的代码,编译后根据报错调试(失败 ...

  2. Mysql索引会失效的几种情况

    1.如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因): 2.对于多列索引,不是使用的第一部分,则不会使用索引: 3.like查询是以%开头: 4.如果列类型是字符串, ...

  3. C# 代码小技巧

    一 .自动属性. 1.vs下输入prop,Tab键就出现了.   2.有了自动属性,我们不用再额外为一个类的每个公共属性定义一个私有字段(实际上没多大用处的字段), 但是通过反射还是可以看到对应的私有 ...

  4. Linux查看端口占用情况并释放端口占用

    1.netstat -tunlp:查看所有tcp/udp端口占用及进程相关信息 2.netstat -tln | grep 端口号:查看特定端口占用情况 3.kill -9 进程ID(PID):释放指 ...

  5. java中的exception stack有时候不输出的原因(转)

    原文  https://www.cnblogs.com/lemonlotus/p/5650687.html 有时候,我们在看java错误日志时,只看到一个java.lang.NullPointerEx ...

  6. django 补充和中间件

    配置 from django.conf import settings form组件 from django.forms import Formfrom django.forms import fie ...

  7. node.js打印function

    var Person = function(name) { this.name = name; this.gender = ['man', 'woman']; } console.log(Person ...

  8. nginx ------反向代理和负载均衡

    最近由于公司的业务增长 服务器承受不住压力经常出现崩溃现象 为了解决 使用nginx的负载均衡解决,以下是操作步骤: 1.nginx 的负载均衡:将压力分散到不同的机器上 nginx不单可以作为强大的 ...

  9. (7)linux文件常用操作命令

    ls / 查看根目录下的子节点(文件夹和文件)信息ls -al -a是显示隐藏文件 -l是以更详细的列表形式显示 **切换目录cd /home cd .. 返回上一级 **创建文件夹mkdir aaa ...

  10. Docekr 挂在卷之后访问目录时异常 cannot open directory '.': Permission denied 的解决办法

    1,原因,原因是CentOS7 中的安全模块 selinux 把权限禁掉了 2,解决办法如下 2.1,运行容器是加参数在 --privileged=true   (个人认为这是最佳方式,推荐使用) 如 ...