python基础一 ------Python 的编码
首先了解一下历史,但是本篇文章冗杂,如老太太裹脚布----------又臭又长
编码历史:
1. 计算机只能处理数字,文本文件只有转换为数字
才能处理。8bit==1字节 所以一个字节能表示的最大的数就是255
2. 美国人发明计算机。用英语,所有一个字节就表示了所有字符
就是ASCII(一个字节) 编码就是美国人的标准编码
3. 当中国人使用计算机时,需要表示中文字符,于是就发明了
GB2312的编码格式,即用两个字节表示一个汉字。同理,其他语言国家
也就创建了自己相应的编码。没有一个共同的标准,于是当不同语言用
了不对应的编码就会产生乱码
4.为统一标准,Unicode 编码出现了,所有语言统一到一套编码
Unicode与ASCII 编码比较
1) 字母A: ASCII 十进制65,二进制就是 0100 0001
汉字中 ASCII表示不了 采用Unicode编码为20013 二进制:01001110 00101101
2) 为计算机识别统一长度,所以A 前面位置补0 即 00000000 0100 0001
标准就此统一
5. 标准统一了,乱码问题解决了,但是Unicode编码长度较长,但计算机英文为主,
若内容若全是英文,Unicode编码就比ASCII编码多一倍存储空间,同时传输也多一倍
怎么解决呢?
6.要是Unicode 编码可以变化就好了,于是UTF-8 出现了
utf-8 中,字母一个字节,一个汉字3个字节,特别生僻的4-6个
于是节约了空间和存储
7,那么问题来了:计算机只认Unicode 编码
utf-8 之间怎样转换的
如图:
当需要被计算机识别时,就会加载到内存,此时采用的编码就必须是Unicode 编码
当需要在网络中传输时,或者存储在文件中时,就采用UTF-8编码,为了节约空间成本
所以就有了相互转化
python2 和python3 在Windows/Linux 上的编码转换
python2:
在Windows:
1. 先来看看window 本身是什么编码
import sys
sys.getdefaultencoding()
#out: "utf-8"
2. 字符串全部英文
s1= "abc" --> type(s1):str
s2 = u"abc" --> type(s2):Unicode
u""的意义:表示将后面的字符串以unicode格式存储
s1.encode("utf8") 成功
s2.encode("utf8") 成功
3. 当出现中文时:
s1 = "你好" --> GB2312编码。windows下
s2 = u"你好"
s1.encode("utf8") 报错
s2.encode("utf8") 成功
报错原因:
在内存中是以Unicode 进行编码的,但是
s1 在传递过来时就是不是Unicode编码了(原因是存储浪费),而
encode是将一个Unicode 对象转化为参数中的编码格式进行编码
所以说 s2不会报错
解决办法:
先将这个gb2312的编码转化为unicode编码的对象
然后再转化为utf-8
s1.decode("gb2312").ecode("utf8") 成功 Windows下为"gb2312"
decode("xx")方法是将一个编码为"xx"的对象转化
为Unicode对象
在Linux下:
1. 先来看看linux 本身是什么编码
import sys
sys.getdefaultencoding()
#out: "ascii"
2. 字符串全部英文
s1= "abc" --> type(s1):str
s2 = u"abc" --> type(s2):Unicode
u""的意义:表示将后面的字符串以unicode格式存储
s1.encode("utf8") 成功
s2.encode("utf8") 成功
3. 当出现中文时:
s1 = "你好" --> utf-8编码。Linux下 为啥不是ascii? 那ascii能表示中文吗?
肯定是转化为了utf-8 了啊
s2 = u"你好"
s1.encode("utf8") 报错
s2.encode("utf8") 成功
解决办法:
先将这个utf-8的编码转化为unicode编码的对象
然后再转化为utf-8
s1.decode("utf8").ecode("utf8") 成功 Linux下中文为"utf-8"
等价于 s1 又转回去了,本身就是utf-8编码
python 3:
在python3 中,所有的str类型的都是Unicode 格式编码,可以直接encode为"utf-8"
在Windows:
1. 字符串全部英文
s1= "abc" --> type(s1):str
s2 = u"abc" --> type(s2):Unicode
u""的意义:表示将后面的字符串以unicode格式存储
s1.encode("utf8") 成功
s2.encode("utf8") 成功
2. 当出现中文时:
s1 = "你好" --> Unicode编码。windows下
s2 = u"你好" ---> 没有必要这样写 ,不加u"",3也认为这就是Unicode
s1.encode("utf8") 成功
s2.encode("utf8") 成功
在Linux下: 跟在window 下一样
总结:
谈谈 #-*-coding:UTF-8 -*-
python2与3 最大的区别:
2 中当文件有中文出现时就必须在开头加上,而且汉字字符串必须加u""
作用:
告知python 这个文件是按照utf-8格式编码的python就会按照这个编码进行解读,
然后在内部进行Unicode转换
为什么3中不用写:
3中Python都会将文件以Unicode进行解读
3
python基础一 ------Python 的编码的更多相关文章
- 二十一. Python基础(21)--Python基础(21)
二十一. Python基础(21)--Python基础(21) 1 ● 类的命名空间 #对于类的静态属性: #类.属性: 调用的就是类中的属性 #对象.属性: 先从自己的内存空间里找名 ...
- python基础知识3---字符编码
阅读目录 一 了解字符编码的知识储备 二 字符编码介绍 三 字符编码应用之文件编辑器 3.1 文本编辑器之nodpad++ 3.2 文本编辑器之pycharm 3.3 文本编辑器之python解释器 ...
- python基础——6(字符编码,文件操作)
今日内容: 1.字符编码: 人识别的语言与机器识别的语言转化的媒介 ***** 2.字符与字节: 字符占多少字节,字符串转化 *** 3.文件操作: 操作硬盘中的一块区域:读写操作 ...
- Python基础之字符串和编码
字符串和编码 字符串也是一种数据类型,但是字符串比较特殊的是还有个编码问题. 因为计算机自能处理数字,如果徐娅处理文本,就必须先把文本转换为数字才能处理,最早的计算机子设计时候采用8个比特(bit)作 ...
- Python基础-week01 Python安装/变量/输入/及循环语句使用
一.Python介绍 (1).目前Python主要应用领域: 云计算: 云计算最火的语言, 典型应用OpenStack WEB开发: 众多优秀的WEB框架,众多大型网站均为Python开发,You ...
- Python基础-1 python由来 Python安装入门 注释 pyc文件 python变量 获取用户输入 流程控制if while
1.Python由来 Python前世今生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚 ...
- Python基础+Pythonweb+Python扩展+Python选修四大专题 超强麦子学院Python35G视频教程
[保持在百度网盘中的, 可以在观看,嘿嘿 内容有点多,要想下载, 回复后就可以查看下载地址,资源收集不易,请好好珍惜] 下载地址:http://www.fu83.cc/ 感觉文章好,可以小手一抖 -- ...
- Python基础 初识Python
机器码 机器码(machine code),学名机器语言指令,有时也被称为原生码(Native Code),是电脑的CPU可直接解读的数据. 通常意义上来理解的话,机器码就是计算机可以直接执行,并且执 ...
- python基础实践 -python是一门动态解释性的强类型定义语言
python是一门动态解释性的强类型定义语言 Python能做什么? Python是一门综合性的语言,你几乎能在计算机上通过Python做任何事情,以下是Python应该最广泛的几个方面: 1.网络应 ...
随机推荐
- CF1065D
如果不喜欢过长代码的看官,请移步其他题解... 这题其实思想极其简单: 棋盘问题常见的算法都比较暴力,常用的有搜索和状压dp 而这道题显然没啥能状压的,所以我们考虑搜索 但是仅仅搜索是不够的,因为有极 ...
- 从认识面向对象到构造函数的标准写法(构造函数的继承、多态、ECMA6中新代替语法class) - 下
笔记一个包含:认识面向对象.构造函数的封装.继承.多态.ECMA6中新代替语法class 下:包括构造函数的继承.多态.ECMA6中新代替语法class 构造函数的继承 从父一级延续下来的属性和功能( ...
- 即时通讯协议之XMPP
目前IM即时通信有四种协议 1.即时信息和空间协议(IMPP) 2.空间和即时信息协议(PRIM) 3.针对即时通讯和空间平衡扩充的进程开始协议SIP 4.XMPP协议: 该协议的前身是Jabber, ...
- java中的相对目录问题
在java开发过程中,常常需要使用本地文件内容文件.在调试他人代码的过程中,可能不经意间改变了源代码的根目录(顶级目录),从而导致“java io filenotfoundexception ”.解决 ...
- python——mysql京东数据库设计案例(源码)
# 显示界面信息# 循环界面信息# 根据用户输入数据来做相应的选择from pymysql import connect def jingdong_info(): '''#显示界面信息''' prin ...
- 免费API接口
网址:https://code.juhe.cn/ http://apistore.baidu.com/ http://blog.csdn.net/cc20032706/article/details/ ...
- BZOJ5084[hashit]
题解: 后缀自动机 我们可以通过建立trie 把询问变成询问一些点的并 把trie建立成SAM和广义SAM基本相同,就是在父亲和儿子之间连边 然后就变成了询问树链的并 我们可以发现答案=sigma d ...
- ERROR 000732:Output Geodatabase:Dataset Database Connections\Connection to localhost.sde\SDE.Dataset does not exist or is not supported
ArcCatalog 10中向SDE 数据集导入要素类时,出错:ERROR 000732:Output Geodatabase:Dataset Database Connections\Connect ...
- Vim的合并行操作
日常常用到多行合并的功能,记录如下: 第一种, 多行合并成一行,即: AAAAABBBBBCCCCC 合并为:AAAAA BBBBB CCCCC 方法1: normal状态下 3J 其中的3是范围,可 ...
- Codeforces 865C Gotta Go Fast 二分 + 期望dp (看题解)
第一次看到这种骚东西, 期望还能二分的啊??? 因为存在重置的操作, 所以我们再dp的过程中有环存在. 为了消除环的影响, 我们二分dp[ 0 ][ 0 ]的值, 与通过dp得出的dp[ 0 ][ 0 ...