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字符编码的更多相关文章

  1. day08(字符编码,字符与字节,文件操作)

    一,复习 ''' 类型转换 1.数字类型:int() | bool() | float() 2.str与int: int('10') | int('-10') | int('0') | float(' ...

  2. 字符编码 + python2和python3的编码区别(day08整理)

    目录 昨日回顾 二十三.元组内置方法 二十四.散列表 二十五.字典内置方法 二十六.集合内置方法 二十七.深浅拷贝 拷贝 浅拷贝 深拷贝 今日内容 二十八.字符编码 1.文本编辑器存储信息的过程 2. ...

  3. 员工管理系统+字符编码+Python代码文件操作

    员工管理系统+字符编码+Python代码文件操作 1.员工管理系统 1.1  debug 代码调试 1.先使用鼠标左键在需要调试的代码左边点击一下(会出现一个红点)2.之后右键点击debug运行代码 ...

  4. Python遇到字符编码出问题的一个相对万能的办法

    在使用Python做爬虫的过程中,经常遇到字符编码出问题的情况. UnicodeEncodeError: 'ascii' codec can't encode character u'\u6211' ...

  5. python学习笔记(基础一:'hello world'、变量、字符编码)

    第一个python程序: Hello World程序 windows命令行中输入:python,进入python交互器,也可以称为解释器. print("Hello World!" ...

  6. Python学习Day2笔记(字符编码和函数)

    1.字符编码 #ASCII码里只能存英文和特殊字符 不能存中文 存英文占1个字节 8位#中文编码为GBK 操作系统编码也为GBK#为了统一存储中文和英文和其他语言文字出现了万国码Unicode 所有一 ...

  7. mysql 5.5 修改字符编码

    修改/etc/mysql/my.cnf 配置文件: 最后重启mysql 服务,再查看: 编码已经改好了,可以支持中文字符编码了.

  8. mysql命令行修改字符编码

    1.修改数据库字符编码 mysql> alter database mydb character set utf8 ; 2.创建数据库时,指定数据库的字符编码 mysql> create ...

  9. 关于Unicode,字符集,字符编码,每个程序员都应该知道的事

    关于Unicode,字符集,字符编码,每个程序员都应该知道的事 作者:Jack47 李笑来的文章如何判断一个人是否聪明?中提到: 必要.清晰.且准确的概念,是一切思考的基石.所谓思考,很大程度上,就是 ...

随机推荐

  1. 17.TLB

    我们只想读4个字节,但我们要经过如下的步骤 读取 字节的PDE 读取 字节的 PTE 读取 字节(int 占用4字节)的物理内存 在 10-10-12 分页模式下,CPU 每次要访问额外的访问 8 字 ...

  2. VS2015 : error LNK1168

    VC在重新生成Debug目录下的exe文件时,需要先删除原先的exe文件.但因为文件正在运行或是被锁定等原因,删除不了,于是出现 LNK1168错误.可以到任务管理器先将exe文件关闭,一个简单粗暴的 ...

  3. [題解](最短路/二分)luogu_P1462通往奧格瑞瑪的道路

    看到最大的最小值應該想到二分答案,這樣就解決了最小點權的問題,判血量就很好說,直接比較就行, 一個點是二分點權數組,複製一份然後排序,二分下標,速度較快 這麼簡單的題我竟然寫了這麼長時間 #inclu ...

  4. HDU-1029-Ignatius aned the Princess IV

    链接:https://vjudge.net/problem/HDU-1029#author=0 题意: 给你n个数字,请你找出出现至少(n+1)/2次的数字. 思路: dp,hash超时了,不知道是不 ...

  5. Codeforces Round #397 by Kaspersky Lab and Barcelona Bootcamp (Div. 1 + Div. 2 combined) C

    Misha and Vanya have played several table tennis sets. Each set consists of several serves, each ser ...

  6. python学习之模块:

    每个.py文件就是一个以文件名作为区别的模块,模块化编程便于维护.其它模块要调用某个模块的变量和函数就要用import 模块,然后通过模块.函数.模块.变量来引用. 为防止模块间变量和函数乃至模块名的 ...

  7. Unix高级环境编程之fcntl函数

    #include <fcntl.h> int fcntl(int fd, int cmd, ...) fcntl功能 复制一个现有的描述符 (cmd = F_DUPFD) ##### 返回 ...

  8. 配置Gradle构建

    构建基础配置 Android Studio包含一个顶级的构建文件和每个模块的构建文件.构建文件被称为 build.gradle,它是一个纯文本文件,它使用Groovy语法来配置由Android Gra ...

  9. [转]Ioc容器Autofac

    本文转自:http://www.cnblogs.com/hkncd/archive/2012/11/21/2780041.html Ioc容器Autofac系列(1)-- 初窥   前言 第一次接触A ...

  10. Windows7获取、更换桌面背景,C#

    使用的API原型是 BOOL SystemParametersinfo(UINT uiAction,UINT uiParam,PVOID pvParam,UINT fWinlni); 在C#中定义如下 ...