Python简介及编码
首先Python是一种语言,因此根据其实现的不同,有Cpython, Jython, IronPython, Pypy等。
Python执行流程
$ python /home/hello.py 当在终端上执行py文件,流程图如下:

字符集
- ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256,所以,ASCII码最多只能表示 256 个符号。显然ASCII码无法将世界上的各种文字和符号全部表示,所以,就需要新出一种可以代表所有字符和符号的编码,即:Unicode
- Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536,注:此处说的的是最少2个字节,可能更多。
- UTF-8是对Unicode编码的压缩和优化,目前使用的最广泛,是一种可变长字符编码,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存。

内存读写信息是以byte为单位.

编码和解码(encode==编码,decode==解码)
为什么要编码和解码?
答案是:便于存储和传输。因为计算机底层只能识别0和1的二进制数据,encode就是把逻辑上的字符变成二进制数据,以便存储和传输,使用decode把二进制数据解码成逻辑的字符便于用户理解和操作。至于编码前和解码后的字符是怎么存储的,是Python的内部实现,只有 Python 自己需要操心,用户不用管,就像你不用管整数在 Python 内存里长什么样一样,但是你把整数存起来或者传输到网络上时就得考虑,是转成十进制字符串表示呢,还是转成32位无符号小端序表示呢,还是64位有符号网络序表示呢……
python 2.x 默认编码(ASCII)
在Python2中默认是ASCII编码,所以不支持中文,如果要支持中文就必须声明为unicode字符串,即在字符串前面加个u。
>>> str1 = 'my name is Ray' # ascii字符串
>>> str2 = u'我的名字是Ray' # unicode字符串
>>>
>>> type(str1)
<type 'str'>
>>> type(str2)
<type 'unicode'>
非unicode字符串需要先解码为unicode字符集才能编码为其他字符集,unicode字符集起到一个中介作用。
>>> str1 = 'my name is Ray'
>>> str2 = u'我的名字是Ray'
>>>
>>> str1.decode()
u'my name is Ray'
>>>
>>> str1.decode().encode('utf-8')
'my name is Ray'
>>>
>>> str2.encode('gbk')
'\xce\xd2\xb5\xc4\xc3\xfb\xd7\xd6\xca\xc7Ray'
python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill),如果有文件中有非ascii字符出现,则需要申明utf-8编码,让解释器以utf-8编码,不然会报错。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
python 3.x 默认编码(unicode)
在Python3中字符串都是str类型,编码之后变成byte类型(二进制,输出时一般以16进制或者10进制表示,方便查看),str类型使用encode编码为byte类型,byte类型使用decode解码为str类型,也可以使用str()和bytes()方法对两种类型进行转换,效果是一样的。
>>> str1 = 'Hello China'
>>> str2 = '你好中国'
>>>
>>> type(str1)
<class 'str'>
>>> type(str2)
<class 'str'>
>>>
>>> str1.encode('utf-8')
b'Hello China'
>>> str2.encode('gbk')
b'\xc4\xe3\xba\xc3\xd6\xd0\xb9\xfa'
>>>
>>> s3 = str1.encode('utf-8')
>>> s4 = str2.encode('gbk')
>>>
>>> type(s3)
<class 'bytes'>
>>> type(s4)
<class 'bytes'>
>>>
>>> for i in str2:
... print(i)
...
你
好
中
国
>>> for j in s4:
... print(j)
...
196
227
186
195
214
208
185
250
>>>
# 使用str()和bytes()转换,效果是一样的
>>> str(s4, 'gbk')
'你好中国'
>>> bytes(str2, 'gbk')
b'\xc4\xe3\xba\xc3\xd6\xd0\xb9\xfa'
>>>
Python简介及编码的更多相关文章
- python简介、第一个python程序、变量、字符编码、用户交互程序、if...else、while、for
也愿大家永葆初心-- 已识乾坤大,犹怜草木青. 一.python简介 首先,我们普及一下编程语言的基础知识.用任何编程语言来开发程序,都是为了让计算机干活,比如下载一个MP3,编写一个文档等等,而计算 ...
- 3. Python 简介
3. Python 简介 下面的例子中,输入和输出分别由大于号和句号提示符 ( >>> 和 ... ) 标注:如果想重现这些例子,就要在解释器的提示符后,输入 (提示符后面的) 那些 ...
- Python之路【第一篇】:Python简介和入门
python简介: 一.什么是python Python(英国发音:/ pa θ n/ 美国发音:/ pa θɑ n/),是一种面向对象.直译式的计算机程序语言. 每一门语言都有自己的哲学: pyth ...
- Python 简介和入门
1.Python简介 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC ...
- Python自动化 【第一篇】:Python简介和入门
Python简介: 一.什么是python Python是一门动态解释性的强类型定义语言. pythonde 特点:“优雅”.“明确”.“简单”. 二.Python由来 python的创始人为吉多·范 ...
- Python学习之Python简介
Python简介 Python的由来 Python(英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种面向对象.解释型计算机程序设计语言,它是吉多·范罗苏姆(Guide van ...
- python成长之路【第一篇】:python简介和入门
一.Python简介 Python(英语发音:/ˈpaɪθən/), 是一种面向对象.解释型计算机程序设计语言. 二.安装python windows: 1.下载安装包 https://www.pyt ...
- 【python之旅】python简介和入门
python简介: 一.什么是python python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了打发时间,决心开发一个新的脚本解释程序, ...
- Python开发【第一章】:Python简介和入门
Python简介 Python的创始人为Guido van Rossum.1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,做为ABC 语言的一种继承. ...
随机推荐
- SecureCRTPortable的安装和使用(图文详解)
不多说,直接上干货! 玩玩这个远程连接软件,是个绿色软件. 别人已经做好了的. 解压之后, 下面,软件展示下, 这会默认去打开, 为了,方便,使用,放到桌面,作为快捷方式 成功 欢迎大家,加入我的微信 ...
- Java二进制兼容性原理
一.概述 现在的软件越来越依赖于不同厂商.作者开发的共享组件,组件管理也变得越来越重要.在这方面,一个极其重要的问题是类的不同版本的二进制兼容性,即一个类改变时,新版的类是否可以直接替换原来的类,却不 ...
- mvc手把手教你写excel导入[mvc+三层,没用EF]
实习狗的每天新知识日常 准备工作: 1.在项目中添加对NPOI的引用,NPOI下载地址:http://npoi.codeplex.com/releases/view/38113 2.NPOI学习系列教 ...
- nodejs记录2——一行代码实现文件下载
主要使用fs模块的pipe方法,简单粗暴: import fs from "fs"; import path from 'path'; import request from 'r ...
- jQuery 关于IE9上传文件无法进入后台问题的原因及解决办法(ajaxfileupload.js第四弹)
第四弹的诞生完全不在自己最初的计划之中,是有个网友看了先前关于<ajaxfileupload.js系列>的文章后提出的问题,由于自己一直是用chrome浏览器去测试demo,完全忽略IE浏 ...
- SpringBoot MockMvc的单元测试
对于类的测试,可以有很多的方式进行实现,比如可以使用PostMan,使用HttpClient请求等,这里主要讲的是MockMcv的测试 一:引入依赖 <dependency> <gr ...
- 微服务系列(二):使用 API 网关构建微服务
编者的话|本文来自 Nginx 官方博客,是微服务系列文章的第二篇,本文将探讨:微服务架构是如何影响客户端到服务端的通信,并提出一种使用 API 网关的方法. 作者介绍:Chris Richardso ...
- Spring MVC No converter found for return value of type 解决方法
1.在pom中添加 jackson <properties> <jackson.version>2.8.5</jackson.version> </prope ...
- 解决:启动项目报错 java.lang.UnsatisfiedLinkError: D:\Java\apache-tomcat-8.0.17\bin\tcnative-1.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform
启动项目报错如下: java.lang.UnsatisfiedLinkError: D:\Java\apache-tomcat-8.0.17\bin\tcnative-1.dll: Can't loa ...
- k:特殊的线性表—队列
队列的概念: 队列是另一种特殊的线性表,它的特殊性体现在其只允许在线性表的一端插入数据元素,在线性表的另一端删除数据元素(一般会采用在线性表的表尾那端(没被head指针所指的那端)插入数据元素,在线 ...