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 李笑来的文章如何判断一个人是否聪明?中提到: 必要.清晰.且准确的概念,是一切思考的基石.所谓思考,很大程度上,就是 ...
随机推荐
- 证书重复冲突问题:Command /usr/bin/codesign failed with exit code 1
打开钥匙串 查看是否有两个identifier为相同 的证书,显然导证书的时候不知道怎么把证书导进了系统帐号,并且还重复了.把重复的证书删除就行了.
- python之函数名,闭包、迭代器
一.函数名的运用(第一类对象) 函数名是一个变量,但它是一个特殊的变量,与括号配合可以执行函数的变量. 1,函数名的内存地址: def func(): print("呵呵") pr ...
- 创建Maven项目出错 pom出错
错误为 org.apache.maven.archiver.MavenArchiver.getManifest(org.apache.maven.project.MavenProject, org.a ...
- 第十二章 设计用户界面 之 设计自适应的UI布局
1. 概述 随着手机和平板设备的日益普及,使得开发者不得不考虑MVC网站在移动设备上的展示. 本章内容包括:运行在多种设备上的程序(屏幕分辨率,CSS,HTML).设计手机端Web程序. 2. 主要内 ...
- [牛客网试题] Test.main() 函数执行后的输出是()
public class Test { public static void main(String [] args){ System.out.println(new B().getValue()); ...
- FreeMusic项目优化(一)——flex布局学习记录
参考博客:http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html flex布局是w3c于09年提出的,用于简便,整洁,响应式地解决布局问题的手 ...
- Android 仿微信朋友圈添加图片
github地址(欢迎下载Demo) https://github.com/zhouxu88/WXCircleAddPic 老习惯,先上图,着急用的朋友,直接带走Demo,先拿来用吧,毕竟老板催的紧, ...
- 【MATLAB 从零到进阶】day2 矩阵 数组
访问矩阵元素 >> A=[1,2,3;4,5,6;7,8,9]; >> x=A(2,3)% 双下标访问 x = 6 >> x=A(2)% 单下标访问 x = 4 单 ...
- jsonwebapi请求头的设置
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
- ef导航属性
https://msdn.microsoft.com/en-us/data/jj574232.aspx 场景是 A表中有B,B表中又C.都是一堆多的关系.怎样Mapping是个问题啊. var ...