二进制
------>ASCII:只能存英文和拉丁字符。一个字符占用一个字节,8位
------------>gb2312:智能6700多个中文, 1980年
        gbk1.0:存了2万多字符 1995年
        gb18030:2w7汉字 2000年
------------>其他国家大量编码

------------------------>统一的万国码 unicode:utf-32 一个字符占4个字节
------------------------>统一的万国码 unicode:utf-16 一个字符占2个字节
为解决内存的问题,开发了utf-16但是一些字找不到
--------------->再次改进unicode:utf-8:
英文用ASCII码占用一个字节,中文3个字节,欧洲2个字节

计算只认识二进制0,1   而在python中,字节类型就非常接近二进制

  明文:就是我们可以认识的数据

  密文:我们不认识,但是计算机认识的数据

注意:byts类型不会记录编码格式,但是相同的unicode字符串,根据不同的编码格式(utf-8,gbk等)得到的结果是不一致的。

py2中的编码:

py2中存在着两种数据格式:他是都是basestring的子类。

1.str              以bytes字节流存储,更接近计算机,密文,len(一个汉字) 长度是3 因为在utf-8编码的存储,一个汉字长度就是3。(所以在py2中的sock可以直接传递str)

2.unicode  以unicode编码存储,其实就是一个字符串,len(一个汉字)长度是1 就是我们认识的明文

  py2的优点:

    1.字符串的拼接: s="hellow"+u"yuan"   字节流与unicode 进行拼接,不是应该报错吗?

        可以进行拼接 因为,py2中自动帮我们把assic码的字节流转换为了unicode。

        但是在非aciic码的字节流就会失效了。比如 s='娄'+u"辉" 因此我们自己去编码

 

py3编码

python3 renamed the unicode type to str ,the old str type has been replaced by bytes.

  1.python3 中把unicode类型 弄成了str(因为我们比较常用),原来的str弄成了bytes类型

   2.定义了str 与 bytes类型的清晰界限,解释器不帮我们转换,需要我们去转换

注意:无论py2,还是py3,与明文直接对应的就是unicode数据,打印unicode数据就会显示相应的明文(包括英文和中文)

#文件开头的encoding:utf-8的作用

在py2中,默认的编码是assic    在使用 s=“汉字” 的时候,acssic码中没有,所以报错,所以使用 coding:utf-8

在py3中,默认的编码是unicode             可以使用 sys.getdefaultencoding()查看

  但是 py3中str 和 py2中 str = u”“汉字”的时候,都是unicode的,内存的统一,便于操作!!

同时还需要注意一个点: 文本保存的编码方式与编译器的编码格式要一直

编码cmd下的错误:

hello.py

#coding:utf8

print ('苑昊')

文件保存时的编码也为utf8。

思考:为什么在IDE下用2或3执行都没问题,在cmd.exe下3正确,2乱码呢?

我们在win下的终端即cmd.exe去执行,大家注意,cmd.exe本身就是一个软件;当我们python2 hello.py时,python2解释器(默认ASCII编码)去按声明的utf8编码文件,而文件又是utf8保存的,所以没问题;问题出在当我们print'苑昊'时,解释器这边正常执行,也不会报错,只是print的内容会传递给cmd.exe显示,而在py2里这个内容就是utf8编码的字节数据,而这个软件默认的编码解码方式是GBK,所以cmd.exe用GBK的解码方式去解码utf8自然会乱码。

py3正确的原因是传递给cmd的是unicode数据,符合ISO统一标准的,所以没问题。(这里也解释了为什么 字符串默认就是unicode的方式更好。)

python之编码问题的更多相关文章

  1. python Unicode 编码解码

    1 #将Unicode转换成普通的Python字符串:"编码(encode)" 2 unicodestring = u"Hello world" 3 utf8s ...

  2. python的编码问题

    本文简单介绍了各种常用的字符编码的特点,并介绍了在python2.x中如何与编码问题作战 :) 请注意本文关于Python的内容仅适用于2.x,3.x中str和unicode有翻天覆地的变化,请查阅其 ...

  3. python 字符编码练习

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

  4. Python 字符编码 zz

    http://www.cnblogs.com/huxi/archive/2010/12/05/1897271.html 1. 字符编码简介 1.1. ASCII ASCII(American Stan ...

  5. python 之编码问题详解

    前在一个项目中遇到用post提交一个xml,xml中含有中文,对于单独的py文件,使用urllib2.urlopen完全ok,但在django中使用就一直报编码错误,然后在网上看到这篇文章不错,决定m ...

  6. 19.python的编码问题

    在正式说明之前,先给大家一个参考资料:戳这里 文章的内容参考了这篇资料,并加以总结,为了避免我总结的不够完善,或者说出现什么错误的地方,有疑问的地方大家可以看看上面那篇文章. 以下说明是针对于pyth ...

  7. Python字符编码详解

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

  8. python的编码

    python的编码 1.概述 讲述编码,那么就要涉及到几个方面,包括系统中如何来显示字符,文件中如何来保存字符. 1.1 系统环境 在系统中显示字符,那么就必须要考虑到系统中使用的编码格式. 在lin ...

  9. 【转】Python字符编码详解

    转自:http://www.cnblogs.com/huxi/archive/2010/12/05/1897271.html 1. 字符编码简介 1.1. ASCII ASCII(American S ...

  10. python与编码

    Python中的文字对象 Python 3.x中处理文字的对象有str, bytes, bytearray. bytes和bytearray可以使用除了用作格式化的方法(format, format_ ...

随机推荐

  1. cain使用方法

    首先安装cain,这里就不废话了 1, 选择中核弹标志左边的按一下,然后在sniffer右键点击第一个扫描内网所有ip 扫描完后选择网关的IP下面选择arp标志,在按一下上方空格处,+号变得可以使用了 ...

  2. bzoj 1415: [Noi2005]聪聪和可可

    直接上记忆化搜索 #include<queue> #include<cstdio> #include<algorithm> using namespace std; ...

  3. c++(排序二叉树插入)

    二叉树的节点插入比较简单.一般来说,二叉树的插入主要分为以下两个步骤: 1) 对当前的参数进行判断,因为需要考虑到头结点,所以我们使用了指针的指针作为函数的输入参数 2) 分情况讨论: 如果原来二叉树 ...

  4. jqgrid 分页 (基于ashx)

    1:数据库表创建并往中插入200000条数据: 复制代码 CREATE TABLE [dbo].[T_School]( [ID] [int] IDENTITY(1,1) NOT NULL, [Scho ...

  5. [国嵌笔记][033-034][设置svc模式]

    [设置svc模式] 设置CPU为SVC模式 1.因为初始化系统需要有很高的权限,SVC模式具有该权限,所以首先要使系统工作在SVC(0b10011)模式 2.设置cprs为0xd3(0b1101001 ...

  6. timeit模块

    算法是计算机处理信息的本质,因为计算机程序本质上是一个算法来告诉计算机确切的步骤来执行一个指定的任务.一般地,当算法在处理信息时,会从输入设备或数据的存储地址读取数据,把结果写入输出设备或某个存储地址 ...

  7. PHP网站从Apache转移到Nginx后产生404错误的原因和解决办法

    原案例分析: 1.原来的网站在wamp环境下搭建完成,一切正常,上传到虚拟主机环境为lnmp,结果访问时可以打开主页,然后点其他页面全部报404错误: 2.经分析得出原因:原网站环境为wamp使用了伪 ...

  8. 重启nginx后丢失nginx.pid的解决方法

    一,nginx的停止操作 停止操作是通过向nginx进程发送信号来实现的. 步骤1:查询nginx主进程号 复制代码 代码如下: ps -ef | grep nginx 在进程列表里 面找master ...

  9. 【开发技术】Get请求和Post请求区别

    a.Get请求是通过URL请求来提交表单数据的:Post是通过HTTP中的POST机制将表单中的数据提交到Action所定制的程序,如果有附件需要用Post方式. b.Get适用于传输数据量小于1K数 ...

  10. List源码学习之ArrayList

    ArrayList 内部结构为一个可重复的对象数组(可存空对象). 内部有以下几个参数: ;/** * 用于空实例的共享空数组实例 */private static final Object[] EM ...