day08-字符编码
目录
计算机基础
启动应用程序
- 双击qq
- 操作系统接受指令,然后把该操作转化为0和1发送给CPU
- CPU接受指令然后把指令发送给内存
- 内存接受指令把指令发送给硬盘获取数据
- qq在内存中运行
写文本的流程
- 在记事本中按下键盘j的时候
- 记事本和操作系统交互,把这个按下j的指令转化为0和1
- 操作系统发送指令给CPU
- CPU把这个0和1的指令转化为j
- 再由显示器显示
期间发生的转化过程我们称之为字符编码
Python解释器执行文件的原理
- 启动Python解释器,python解释器就相当于一个文本编辑器
- 打开文件读取文件的内容,从硬盘上将文件内容读入到内存中
- Python解释器解释内存中的代码,然后才有了python语法的概念
Python解释器与文本编辑器的区别
- 相同点:都是把硬盘中存着的数据读入到内存中,并显示
- 不同点:文本编辑器将文件内容读入到内存后,是为了显示或者编辑,而python解释器还会多执行解释的步骤
字符编码
字符编码发生在哪三个阶段
- 存:从内存到硬盘
- 取:从硬盘到内存
- python解释器器解释
字符编码发展史与分类
由于计算机是由美国人发明,最早的字符编码为ASCII,只规定了英文字母数字和一些特殊字符与数字的对应关系。最多只能用8位来表示(一个字节),即:2**8=256。所以,ASCII码最多只能表示256个符号

但是在处理数据时,不同的国家有不同的语言,所以中国人规定了自己的标准gb2312编码,规定了包含中文在内的字符与数字的对应关系。日本人也会在自己的程序中加入日文。
但是用多国语言编写的文档该用那种编码格式呢?都会出现乱码现象。所以迫切需要一个世界的标准(能包含全世界的语言)于是Unicode应运而生
但是发现unicode编码太浪费内存了,所以做出了一套精简的utf8编码,UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。utf8的出现只是为了节省空间
总结
- 因此为避免乱码现象,在存的时候用什么编码,取得时候用什么编码
- 在内存中的编码格式统一都是unicode
- 从内存到硬盘存入的过程,即unicode --> gbk 称为 编码 encode
- 从硬盘到内存读取的过程,即gbk --> unicode 称为 解码 decode
Python2与Python3解释器编码的区别
Python2解释器(了解)
解释语法的时候,生成变量时会把这个字符丢入内存,这个时候会有两种情况,一种是str编码,一种是unicode编码
- str编码:直接编码成gbk的形式
- unicode编码:直接编码成unicode的形式
Python3解释器
Python3中都是Unicode编码的
- 解释定义变量的语法,会新开辟一块内存空间放入这个变量,然后这个变量在python3中以unicode的形式存储,如字符
x = '上',被python3解释后在内存中会变成x=1010101010101100.理论上print(x)相当于输出1010101010101100,但是这个1010101010101100对于程序员来讲看不懂,所以python3创始人龟叔做了这个操作-把1010101010101100编码按终端的编码格式输出编码后的结果,如上. - 解释定义变量的语法,会新开辟一块内存空间放入这个变量,然后假设这个变量在python3中以utf-8的形式存储,如字符
x = '上',被python3解释后再内存中会变成x=000001101010.理论上print(x)相当于输出000001101010,但是这个000001101010对于程序员来讲看不懂,所以python3创始人龟叔做了这个操作-把000001101010编码按终端的编码格式输出编码后的结果,如上.如果终端的编码为gbk,终端无法识别000001101010.
所以新开辟空间放入变量的时候,就用unicode转换,则终端无论是什么形式的编码格式,都能够识别并打印.
day08-字符编码的更多相关文章
- Day08字符编码
Day08: 知识储备: 硬盘:由硬盘加载到内存,cpu从内存中取 软件产生的数据都是先保存在内存中 文件,输入文字,保存到内存,内存是硬件,硬件只能保存2进制,所以需要转换 文本编辑器,输入文字的时 ...
- day08(字符编码,字符与字节,文件操作)
一,复习 ''' 类型转换 1.数字类型:int() | bool() | float() 2.str与int: int('10') | int('-10') | int('0') | float(' ...
- 字符编码 + python2和python3的编码区别(day08整理)
目录 昨日回顾 二十三.元组内置方法 二十四.散列表 二十五.字典内置方法 二十六.集合内置方法 二十七.深浅拷贝 拷贝 浅拷贝 深拷贝 今日内容 二十八.字符编码 1.文本编辑器存储信息的过程 2. ...
- 员工管理系统+字符编码+Python代码文件操作
员工管理系统+字符编码+Python代码文件操作 1.员工管理系统 1.1 debug 代码调试 1.先使用鼠标左键在需要调试的代码左边点击一下(会出现一个红点)2.之后右键点击debug运行代码 ...
- Python遇到字符编码出问题的一个相对万能的办法
在使用Python做爬虫的过程中,经常遇到字符编码出问题的情况. UnicodeEncodeError: 'ascii' codec can't encode character u'\u6211' ...
- python学习笔记(基础一:'hello world'、变量、字符编码)
第一个python程序: Hello World程序 windows命令行中输入:python,进入python交互器,也可以称为解释器. print("Hello World!" ...
- Python学习Day2笔记(字符编码和函数)
1.字符编码 #ASCII码里只能存英文和特殊字符 不能存中文 存英文占1个字节 8位#中文编码为GBK 操作系统编码也为GBK#为了统一存储中文和英文和其他语言文字出现了万国码Unicode 所有一 ...
- mysql 5.5 修改字符编码
修改/etc/mysql/my.cnf 配置文件: 最后重启mysql 服务,再查看: 编码已经改好了,可以支持中文字符编码了.
- mysql命令行修改字符编码
1.修改数据库字符编码 mysql> alter database mydb character set utf8 ; 2.创建数据库时,指定数据库的字符编码 mysql> create ...
- 关于Unicode,字符集,字符编码,每个程序员都应该知道的事
关于Unicode,字符集,字符编码,每个程序员都应该知道的事 作者:Jack47 李笑来的文章如何判断一个人是否聪明?中提到: 必要.清晰.且准确的概念,是一切思考的基石.所谓思考,很大程度上,就是 ...
随机推荐
- 用Arduino对Apple手表进行远程红外控制
描写叙述 用于控制随意红外设备的Apple手表及iPhone应用. IOS应用发送HTTP请求至一个或多个带有以太网插板的Arduino.Arduino正在解析http请求并发送红外信号.Arduin ...
- VS2012调试执行,网页打不开
360修复漏洞篇 TODO 修复了漏洞.vs2012在firefox和ie中都打不开 解决思路:360漏洞修复→已安装漏洞→卸载刚刚安装的漏洞 就可以解决 忽略漏洞 正常打开.
- bzoj2243【SDOI2011】染色
2243: [SDOI2011]染色 Time Limit: 20 Sec Memory Limit: 512 MB Submit: 4537 Solved: 1702 [id=2243" ...
- javascript设置和获取cookie的方法
设置cookie的方法,和获取cookie的方法例如以下 设置cookie document.cookie="name="+value; //获取cookie当中index是coo ...
- adb 命令模拟按键事件 【转】
本文转载自:http://blog.sina.com.cn/s/blog_68f262210102vc1b.html 转自:http://blog.csdn.net/jlminghui/article ...
- java四舍五入保留几位小数
double d = 3.1415926; String result = String.format("%.2f", d); // %.2f %. 表示 小数点前任意位数 2 表 ...
- Docker为什么刚运行就退出了
引言 最近群里的好多新接触Docker的朋友,好多都遇到了相同的问题,使用 $ docker run -d ubuntu /bin/bash 运行了一个简单的容器后,然后docker ps -a 进行 ...
- C语言内存管理总结
更新: 2018/01/09 增加free() 更新: 2018/04/13 修改部分文字与表格背景色与默认颜色相同 //# TODO: malloc, alloc, calloc, realloc ...
- input如何去掉边框
outline: none; border:solid 0px; 两个属性,ok.
- max_allowed_packet设置问题
最近在运行的项目出现了一个线上事故,有人反映商城的东西下不了单了,到后台看了一下,果然报了一个错 Cause: com.mysql.jdbc.PacketTooBigException: Packet ...