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 李笑来的文章如何判断一个人是否聪明?中提到: 必要.清晰.且准确的概念,是一切思考的基石.所谓思考,很大程度上,就是 ...
随机推荐
- 17.TLB
我们只想读4个字节,但我们要经过如下的步骤 读取 字节的PDE 读取 字节的 PTE 读取 字节(int 占用4字节)的物理内存 在 10-10-12 分页模式下,CPU 每次要访问额外的访问 8 字 ...
- VS2015 : error LNK1168
VC在重新生成Debug目录下的exe文件时,需要先删除原先的exe文件.但因为文件正在运行或是被锁定等原因,删除不了,于是出现 LNK1168错误.可以到任务管理器先将exe文件关闭,一个简单粗暴的 ...
- [題解](最短路/二分)luogu_P1462通往奧格瑞瑪的道路
看到最大的最小值應該想到二分答案,這樣就解決了最小點權的問題,判血量就很好說,直接比較就行, 一個點是二分點權數組,複製一份然後排序,二分下標,速度較快 這麼簡單的題我竟然寫了這麼長時間 #inclu ...
- HDU-1029-Ignatius aned the Princess IV
链接:https://vjudge.net/problem/HDU-1029#author=0 题意: 给你n个数字,请你找出出现至少(n+1)/2次的数字. 思路: dp,hash超时了,不知道是不 ...
- 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 ...
- python学习之模块:
每个.py文件就是一个以文件名作为区别的模块,模块化编程便于维护.其它模块要调用某个模块的变量和函数就要用import 模块,然后通过模块.函数.模块.变量来引用. 为防止模块间变量和函数乃至模块名的 ...
- Unix高级环境编程之fcntl函数
#include <fcntl.h> int fcntl(int fd, int cmd, ...) fcntl功能 复制一个现有的描述符 (cmd = F_DUPFD) ##### 返回 ...
- 配置Gradle构建
构建基础配置 Android Studio包含一个顶级的构建文件和每个模块的构建文件.构建文件被称为 build.gradle,它是一个纯文本文件,它使用Groovy语法来配置由Android Gra ...
- [转]Ioc容器Autofac
本文转自:http://www.cnblogs.com/hkncd/archive/2012/11/21/2780041.html Ioc容器Autofac系列(1)-- 初窥 前言 第一次接触A ...
- Windows7获取、更换桌面背景,C#
使用的API原型是 BOOL SystemParametersinfo(UINT uiAction,UINT uiParam,PVOID pvParam,UINT fWinlni); 在C#中定义如下 ...