python之字符编码

(一)什么是字符编码:

计算机中所有的数据,包括文件,图片,视频,音频等都是以二进制的方式 存储的,计算机只能识别0,1这样的机器语言。而我们想让计算机替我们工作必须能让计算机能够识别我们对它发出的指令,那么就需要一种方式把我们人类的语言翻译成计算机能听懂的语言。这个翻译的过程实际就是一个字符如何对应一个特定数字的标准,这个标准称之为字符编码。

(二)字符编码的发展历程:

阶段一,ASSCII码:一个bytes代表一个字符(英文字符以及键盘上其它所有的字符)1bytes=8bit,8bit可以表示2**8-1 ,一共是256种变化。

阶段二,百家争鸣:中国人为了满足汉字,制定了“GBK”,日本人制定了“shift _gis”,韩国人制定了"Euc-kr"等等。

阶段三, 天下归一:各个国家有各个国家的标准,就不可避免的会有冲突,在多语言混合的文本中,必定会出现乱码的现象。这个时候就出现了可以兼容各个                国家编码的万国码(UIcode),UIcode统一用2bytes代表一个字符,一共可以表示2**16-1=65535种变化。但是这种编码方式对于通篇是英文的文本                来说,无疑是浪费空间的,英文因为1bytes就可以表示一个字符。于是就产生了可变长度字符编码,UFT-8,这种字符编码规定英文用1bytes中文用                    3bytes来表示。但是这种字符编码多了一道识别过程,速度就会比简单粗暴的UIcode要慢很多。这个时候就要在时间和空间上做一个取舍。计算机运                行程序,都需要先将数据加载到内存中来运行,这个时候为了不出现乱码的现象,规定在内存中使用UIcode,而在硬盘中因为各个国家的不同可                 以使用uft-8来存储数据。

(三)字符编码使用:

以下两个场景中涉及到字符编码问题

1,一个python文件的内容是由一堆字符组成(文件未执行时)

2, python中的数据类型是有一堆字符串组成(文件执行时)

文件未执行时:普通文件存储打开的过程就是:首先文本编辑器编辑内容(这个时候是在内存中操作的)然后进行保存(保存在硬盘中)其次读取的过程是相反的,数据从硬盘加载到内存,然后文本编辑器再打印显示给我们。那么python文件呢,在没有运行之前我们所写的代码和这些普通的文档是没有任何区别的,都是一堆字符。用一个简单的图来描述这个过程。

Unicode-----------》encode------------》utf-8

utf-8-------------》decode-------------》Unicode

python文件执行过程,首先启动python解释器,然后加载python文件,解释器识别文件。这里需要注意的是python2中默认的字符编码           是ASCII码,而python3中默认是uft-8。Windows终端是“gbk”。

乱码现象:首先编辑文件的时候是在内存中编辑的,内存中是UIcode编码的,存储是将数据刷到硬盘中,以shift—gis保存的,所以保存的时候就已                  经发生错误,所以打开的时候就会产生乱码,这种乱码是没有办法改变的,如果是文件读取的过程中产生乱码,可以通过选择正确的解码方式就ok                    了,而存文件时乱码,则是对文件的一种破坏!

总结:

无论是何种编辑器,要防止文件出现乱码(一定注意,存放一段代码的文件也仅仅只是一个普通文件而已,此处指的是文件没有执行前,我们打开文件时出现的乱码)

核心法则就是,文件以什么编码保存的,就以什么编码方式打开!对于UIcode数据类型,无论以何种方式打开,都不会出现乱码。

(四)python程序执行:

阶段一:启动python解释器

阶段二:加载python文件到内存

阶段三:读取已经加载到内存中的代码(UIcode编码的二进制)执行过程中会开辟新的内存。

注意:python会读取py文件第一行代码,来决定以什么编码来读取内存。如果不在python文件指定头信息#-*-coding:utf-8-*-,那就使用默认的

python2中默认使用ascii,python3中默认使用utf-8

(五)python2和python3之间的区别

python中的字符串有两种str=bytes,在变量值前面加“u”则定义为UIcode,这里牵扯到python2中变量值开辟内存空间存储时是以UIcode,encode后的bytes存储的而python3中直接以UIcode方式存储的。python3中的字符串也有两种,str相当于py2中加“u”的状态。bytes指的是py3中的变量值可以encode转换成bytes的方式如s1=s.encode(‘utf-8‘)       s2=s.encode(‘gbk‘)。python3默认utf-8,python2 默认ASCII!

总结:1,无论什么文件,以什么方式存就以什么方式取(避免乱码)内存中固定使用UIcode,硬盘中则可根据个人喜好

           2,数据最先产生于内存,是UIcode格式,想要存储或者基于网络传输,需要转换成bytes格式。

UIcode---------》encode---------》bytes

bytes-------》decode-----------》UIcode

时间: 2024-10-18 02:19:32

python之字符编码的相关文章

python 处理字符编码问题

今天好不容易重新开始写Python做实验,结果被字符编码虐的体无完肤.其实之前就已经比较清楚python处理字符编码的套路,但是今天白天反复的出现can't encode/decode ..., the original code not in 178之类的提示,甚是无力,后来偶尔使用了一下sys.setdefaultencoding('utf8')就解决了全部问题,真是不解. 下面还是总结一下Python几个编码设置的含义吧. 1. #coding=utf8 这种形式的注释告诉解释器,应该以c

Python常见字符编码间的转换

学习Python,字符编码间的转换是绕不过去的一只拦路虎,不把编码彻底搞明白,总有一天它会猝不及防坑你一把. Python2.x和Python3.x在字符编码的设置上也有很大区别(Python3未来将是主流,所以Python3为主),今天我们就来一起学习下. 上一篇文章里我已经简述了Python的常见编码了,这里就不再赘述了,还不清楚的小伙伴可以先去看下:     http://www.cnblogs.com/schut/p/8406897.html 一.Unicode 和 UTF-8的纠葛 U

python之----------字符编码具体原理

1.内存和硬盘都是用来存储的. CPU:速度快 硬盘:永久保存 2.文本编辑器存取文件的原理(nodepad++,pycharm,word) 打开编辑器就可以启动一个进程,是在内存中的,所以在编辑器编写的内容也都是存放在内存中的,断电后数据就丢失了.因而需要保存在硬盘上,点击保存按钮或快捷键,就把内存中的数据保存到了硬盘上.在这一点上,我们编写的py文件(没有执行时),跟编写的其他文件没有什么区别,都只是编写一堆字符而已. 3.python解释器执行py文件的原理,例如python  test.

python之字符编码(四)

一.字符编码的使用: 1.文本编辑器 unicode----->encode-------->utf-8 utf-8-------->decode---------->unicode 补充: 浏览网页的时候,服务器会把动态生成的Unicode内容转换为UTF-8再传输到浏览器 如果服务端encode的编码格式是utf-8, 客户端内存中收到的也是utf-8编码的结果. 2.文本编辑器nodpad++: 分析过程?什么是乱码 文件从内存刷到硬盘的操作简称存文件 文件从硬盘读到内存的操

Python:字符编码详解

相关文章 Python中文编码问题:为何在控制台下输出中文会乱码及其原理 1. 字符编码简介 1.1. ASCII ASCII(American Standard Code for Information Interchange),是一种单字节的编码.计算机世界里一开始只有英文,而单字节可以表示256个不同的字符,可以表示所有的英文字符和许多的控制符号.不过ASCII只用到了其中的一半(\x80以下),这也是MBCS得以实现的基础. 1.2. MBCS 然而计算机世界里很快就有了其他语言,单字节

Python基础(字符编码与文件处理)

一.了解字符编码的知识储备 1.计算机基础知识(三副图) 2.文本编辑器存取文件的原理(notepad++,Pycharm,word) 打开编辑器就启动了一个进程,是在内存中运行的,所以在编辑器写的内容在没保存之前都是存放在内存中的,断电后数据就会丢失.因而需要保存到硬盘上,点击保存按钮,就从内存中把数据刷到硬盘上. 3.Python解释器执行py文件的与原理,例如python test.py 第一阶段:python解释器启动,此时就相当于启动了一个文本编辑器. 第二阶段:python解释器相当

第六节,初识python和字符编码

程序语言的发展 机器语言 程序语言,最初的计算机语言是机器语言,完全是0和1组成的二进制串  如:01010101 11010101 汇编语言 因为01010101的字符串,冗长,不利于维护,所以产生了带助记符的汇编语言 举例:fua = 01010101    fub = 11010101 c语言 在汇编的基础上开发了c语言 有了常量,变量,字符串,等运算规则 java.c#.php.python 在c语言的基础长有发展了java.c#.php.python 等各种语言 这些语言都需要安装运行

Python之字符编码(Day10)

1. python解释器执行py文件的原理 ,例如python test.py    第一阶段:python解释器启动,此时就相当于启动了一个文本编辑器 第二阶段:python解释器相当于文本编辑器,去打开test.py文件,从硬盘上将test.py的文件内容读入到内存中(小复习:pyhon的解释性,决定了解释器只关心文件内容,不关心文件后缀名) 第三阶段:python解释器解释执行刚刚加载到内存中test.py的代码( ps:在该阶段,即执行时,才会识别python的语法,执行文件内代码,执行

《转》Python学习(13)-Python的字符编码

转自 http://www.cnblogs.com/BeginMan/p/3166363.html 一.字符编码中ASCII.Unicode和UTF-8的区别 点击阅读:http://www.cnblogs.com/kingstarspe/p/ASCII.html 再推荐一篇相关博文:http://www.cnblogs.com/huxi/archive/2010/12/05/1897271.html 二.Unicode与ASCII Python能处理Unicode和ASCII编码,为了让这两者