字符编码:

Python字符编码贯穿Python学习的始终,现在应用的是Python2中字符编码的问题是很多的。

这次是要彻底解决Python字符编码的问题!!!

1 字符编码的发展过程:

	1 、ASCII :256 美国需要128个字符,只需要7位   --美国
2、扩展ASCII : 8 比特位 --拉丁
3、GB2312 :
中文扩展ASCII 两个字节都大于127 --中国
4、GBK :
两个字节,第一个字节大于127 5、Unicode是一种编码方式 两个字节 16
至少两个字节:2^16 = 65536
在Unicode基础上产生utf-8,可变长字符编码
英文 1个字节,非英文2-6

2 数据的存储形式

内存中的统一是Unicode编码数据的存储是utf-8(硬盘和网络传输)

	存储数据使用utf-8占用空间少
传输数据快 Unicode(明文对应二进制)这个二进制是16进制格式的
utf-8(二进制对应二进制)

3 程序执行前:

普通软件的执行是通过调用操作系统,让CPU从内存中获取数据,然后执行。

	文本编辑器的例子:(这是文件的编码)
**存储:**
明文---Unicode(内存中)------存储到本地--编码成utf-8的格式存放在硬盘上
**读取:**
utf-8解码成Unicode,Unicode解码成中文

4 程序执行中:

Python解释器的有调用执行的功能,首先加载到内存职工需要解码,用什么编码就用什么解码

程序执行中主要是针对的是字符串,Python解释器是逐行执行,文件中的字符串有相应的编码格式,这是最重要的内容。

Python2:

	开头的声明,是解码的声明#coding:utf-8  按照utf-8来解码
Python2默认是ASCII码进行解码

1 str (数据类型的名字): bytes 数据

定义一个字符串就是字节数据

2 unicode (数据类型的名字): unicode将二进制数据编码成另一种二进制数据 (如utf=8)

**Unicode数据前面有u前缀 **

文件的执行编码

s ="中文"
print repr(s) #repr函数是将数据显示成字符串的方式

结果:

**'\xe4\xb8\xad\xe6\x96\x87' ** 现在是字节数据

s =u"中文"    #  在字符串的前面加上u  代表Unicode数据类型
print repr(s)

结果是:

u'\u4e2d\u6587' Unicode数据类型

字节数据的解码

#coding:utf-8
#Python2.7 s1 = '中文'
s2 = u'中文' # print repr(s)
print type(s1)
print type(s1.decode("utf-8")) # 将字节数据(数据类型是str)通过utf-8解码-->unicode数据类型

结果:

type 'str'

type 'unicode'

数据的编码

#coding:utf-8
#Python2.7 s1 = '中文'
s2 = u'中文' # print repr(s)
# print type(s1)
# print type(s1.decode("utf-8")) # 将字节数据(数据类型是str)通过utf-8解码-->unicode数据类型 print type(s2)
print type(s2.encode("utf-8")) # 将Unicode数据(数据类型是Unicode)通过utf-8编码-->str数据类型
print s2

结果是:

type 'unicode'

type 'str'

中文

Python2给解 释器的是字节数据

python3;

默认是Unicode数据 就是str

1 str(数据类型的名字): unicode 数据

2 bytes(数据类型名字): bytes 数据

	将Unicode数据encode
将字节数据decode

完全把字节类型和字符类型分开了,不能混用

注意点:

	1 、Unicode   gbk utf-8 都是编码规则
2 、内存中是Unicode Unicode作为转换的中转站

关于终端的乱码问题:

在pycharm中执行的时候是通过pycharm的软件执行的,pycharm终端默认是utf-8,Windows的cmd是通过win系统编码格式执行的,win默认是gbk,解码的时候可以在字符的前面添加u,或者解码的方式改成coding:gbk

Python字符编码补充的更多相关文章

  1. python 字符编码练习

    通过下面的练习,加深对python字符编码的认识 # \x00 - \xff 256个字符 >>> a = range(256)>>> b = bytes(a) # ...

  2. Python字符编码讲解

    声明:本文参考 Python字符编码详解 在计算机中我们不管用什么语言和程序,最终数据在计算机中的都是字节码(也就是01形式)的形式存在的,如果 计算机直接把字节码显示在屏幕上,很明显一般人看不懂字节 ...

  3. 深入理解Python字符编码--转

    http://blog.51cto.com/9478652/2057896 不论你是有着多年经验的 Python 老司机还是刚入门 Python 不久,你一定遇到过UnicodeEncodeError ...

  4. 深入理解Python字符编码

    不论你是有着多年经验的 Python 老司机还是刚入门 Python 不久,你一定遇到过UnicodeEncodeError.UnicodeDecodeError 错误,每当遇到错误我们就拿着 enc ...

  5. Python字符编码详解,str,bytes

    什么是明文 “明文”是可以是文本,音乐,可以编码成mp3文件.明文可以是图像的,可以编码为gif.png或jpg文件.明文是电影的,可以编码成wmv文件.不一而足. 什么是编码?把明文变成计算机语言 ...

  6. python --- 字符编码学习小结(二)

    距离上一篇的python --- 字符编码学习小结(一)已经过去2年了,2年的时间里,确实也遇到了各种各样的字符编码问题,也能解决,但是每次都是把所有的方法都试一遍,然后终于正常.这种方法显然是不科学 ...

  7. 转1:Python字符编码详解

    Python27字符编码详解 声明 一 字符编码基础 1 抽象字符清单ACR 2 已编码字符集CCS 3 字符编码格式CEF 31 ASCII初创 311 ASCII 312 EASCII 32 MB ...

  8. 转2:Python字符编码详解

    1. 字符编码简介 1.1. ASCII ASCII(American Standard Code for Information Interchange),是一种单字节的编码.计算机世界里一开始只有 ...

  9. python字符编码(二)

    一.什么是字符编码 计算机要想工作必须通电,也就是说‘电’驱使计算机干活,而‘电’的特性,就是高低电压(高低压即二进制数1,低电压即二进制数0),也就是说计算机只认识数字 编程的目的是让计算机干活,而 ...

随机推荐

  1. 【原创】Gitbook使用

    [常用命令] 1.gitbook install 安装依赖模块 2.gitbook build 编译,结果输出在_book文件夹下 3.gitbook serve 本机预览,默认端口为4000 [注意 ...

  2. vue中引入公共方法并使用

    test.js文件(公共js文件) function myFun() { console.log('this is my function') } export { myfun } // 2 expo ...

  3. POJ1182【种类并查集】

    思路: ---来源百度 0表示它与根结点为同类, 1表示它吃根结点, 2表示它被根结点吃. 判断两个点a, b的关系,我们令p = Find(a), q = Find(b),即p, q分别为a, b子 ...

  4. unity3d 在UGUI中制作自适应调整大小的滚动布局控件

    http://blog.csdn.net/rcfalcon/article/details/43459387 在游戏中,我们很多地方需要用到scroll content的概念:我们需要一个容器,能够指 ...

  5. [Xcode 实际操作]八、网络与多线程-(7)使用MessageUI框架,创建并发送一封带有附件的邮件

    目录:[Swift]Xcode实际操作 本文将演示如何使用MessageUI框架,创建并发送一封带有附件的邮件. 使用邮件编辑视图控制器(MFMailComposeViewController)实现邮 ...

  6. 第五章 “我要点爆”微信小程序云开发实例之从云端获取数据制作首页

    下面我们来实现从云端获取数据,完成首页世界页面index的制作,首页分为4个数据列表导航页面,页面具体内容如下: 推荐:为用户推荐最新的点爆信息,它包含文本点爆内容和语音点爆内容. 文爆:筛选出文字点 ...

  7. 大数(string 之间的快速幂)

    //字符串的乘法 string multi(string a, string b){ ], len = a.length() + b.length(); memset(arr, , sizeof ar ...

  8. python操作json来存储简单的数据,pickle来操作复杂的数据

    json作为不同语言间进行数据交互的媒介,在当下已经渐渐取代了之前的xml,看一波python操作json # coding = ascii import json import pickle imp ...

  9. 新生代内存中为什么要有两个survivor区

    首先是关于新生代中的内存分布的描述: 新生代中的对象都是“朝生夕死”的对象,所以每次gc存活的对象很少,于是在新生代中采用的垃圾回收算法是“复制算法”. 将新生代的内存分为一块较大的Eden区域和两块 ...

  10. Python相对导入导致SystemError的解决方案(译)

    原文出处: http://stackoverflow.com/   译文出处:yibohu1899 这个问题是如何解决在相对导入的时候,如果出现’System Error’的时候的解决方案.顺带一提, ...