Day08字符编码
Day08:
知识储备:
硬盘:由硬盘加载到内存,cpu从内存中取
软件产生的数据都是先保存在内存中
文件,输入文字,保存到内存,内存是硬件,硬件只能保存2进制,所以需要转换
文本编辑器,输入文字的时候,是一个转成二进制保存到内存,然后反解成文字显示到屏幕的过程
字符编码:
将字符转换/编码成二进制
为什么要用字符编码:
计算机硬件是基于电工作的,只可以识别0,1二进制数,为了使用更便捷的使用计算机,需将人类的语言转换成二进制,毕竟我们不能以二进制与计算机沟通
第一台计算机是美国人发明的,最初的编码为ascii码,只可以识别英文字符,那个时候并不存在乱码问题,因为程序到内存,内存到硬盘的编码原则仅有ascii码一种
英文字符加上符号有120种左右,使用7位二进制数就可以将他们一一对应,考虑到后续扩展问题,采用了8个二进制位代表一个字符,1个字节 =8bit,1个英文字符占一个字节
各国都需要使用计算机,都创造了各自的编码规则
中国的gbk编码规则,用1个字节代表一个英文字符,用2个字节代表1个中文字符
各国创建的编码规则除了识别自己的语言都兼容英文
规则的不同,导致了各国只能在本国使用计算机,为了解决这个问题,产生了万国码unicode
unicode字符编码表:
建立时考虑的问题:
可以输入万国语言,可以对应各国二进制
1.字符与二进制的对应关系
2.与各种字符编码的二进制数字都有对应关系
但是unicode有一个弊端,就是统一使用2个字节来表示1个字符,如果都是英文字符的话,这将导致读取效率变低
故产生了utf-8 编码原则,utf-8 采用1个字节表示英文字符,3个字节表示1个中文字符
utf -8 提高了从内存到硬盘的存取效率,但也带来了弊端
我们从程序存入内存的编码固定为unicode,这个是不可改的
而我们从内存存到硬盘中可以是gbk,ascii,utf-8编码,这就导致了我们可能以一种编码存,另一种编码取,这将导致乱码问题
解决乱码问题的核心:
1.字符当初以什么编码存的,就应该以什么编码去读
2.保证运行python程序的前两个阶段不乱码的解决方案:添加文件头
在文件首行#coding :文件当初存的字符编码
python2和python3
我们知道:
文本编辑器打开文件的过程:
1.启动文本编辑器
2.文本编辑器将文件内容读入内存
3.将读入内存的内容显示到屏幕上
python解释器执行一个py文件的三个过程
1.启动python解释器
2.将py文件的内容当做普通的文本文件读入内存,没有语法的概念
3.解释执行
文件编辑器和python解释器开个一个文件,在前两个环节都一样
在第三阶段python代码中有数据类型str,也是字符,python解释器执行时,需要申请内存地址去放字符串
这又涉及了编码原则,python3直接将字符串以unicode二进制存入,因为在我们从内存读取数据的时候,内存存放的就是字符串的unicode的二进制
而python2 默认以ascii二进制将字符串存入内存,这样在取值的时候又存在乱码的隐患,python2中将字符串以unicode二进制方式存入内存的方法为在字符串前加小写u
例s = u“haha”
Day08字符编码的更多相关文章
- 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 李笑来的文章如何判断一个人是否聪明?中提到: 必要.清晰.且准确的概念,是一切思考的基石.所谓思考,很大程度上,就是 ...
随机推荐
- $.each(obj,function(index,value)遍历的学习
JQuery遍历对象 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- 《Python网络爬虫相关基础概念》
爬虫介绍 引入 之前在授课过程中,好多同学都问过我这样的一个问题:为什么要学习爬虫,学习爬虫能够为我们以后的发展带来那些好处?其实学习爬虫的原因和为我们以后发展带来的好处都是显而易见的,无论是从实际的 ...
- django (一) 环境的配置及Django文件简介
1, 创建虚拟环境(virtualenv 和virtualenvwrapper) 1.1, virtualenv的概述 virtualenv是用来创建Python的虚拟环境的库,虚拟环境能够独立于真实 ...
- auth_basic 认证
shell > yum -y install httpd-tools # 安装 htpasswd 工具 shell > cd /usr/local/nginx-/conf shell &g ...
- sql server 日期 查询技巧
CONVERT(varchar(100), SendTime, 23) –-sql里的字段SendTime参数 selectdateName(weekday,getDate());--返回当前星期 s ...
- 使用express4.x版、Jade模板以及mysql重写《nodejs开发指南》微博实例
最近阅读<nodejs开发指南>一书,书是不错的,然而其微博代码示例用的是express3.x,用些过时了,运行代码出现不少bug(我电脑安的是express4.x),于是用express ...
- poj 2406 Power Strings 周期问题
Power Strings Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 48139 Accepted: 20040 D ...
- 总结一下最近对nodejs 和 mongodb 的学习
NodeJs 从最开始的node的安装开始...刚开始安装的时候就遇到了坑... 一开始选用的是brew 的安装方式,安装的版本太低了!现在已经是8.9了,后来,mac直接去官网下载了一个安装包就安装 ...
- Android程序中使用iconfont心得
1.关于iconfont iconfont既是icon又是font,具体来说应该是用font形式展现的icon.与传统图片格式的图标不同,这一种图标因为是以字体形式展现的,所以更改大小.颜色.背景颜色 ...
- gvim -- 跳转命令,查找格式,正则
1.跳转命令 ‘w'单词前进,'b'单词后退,'e'单词前进,‘ge’单词后退,存在单词词首词尾区别,'W''B''E''gE'将不以单词区分,以空格区分 ‘$’行尾,'^'非空白行首,'0'行首 ‘ ...