当前位置: 首页 > news >正文

python版本与编码的区别

主要编码介绍

python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill)

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个字节保存...

GBK,也是对Unicode编码的压缩和优化,全称为汉字内码拓展规范,使用了双字节编码方案,由中国信息技术标准化委员会制订。

所以,python2解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill),如果是如下代码的话:

报错:ascii码无法表示中文

1 #!/usr/bin/env python
2   
3 print "你好,世界"

改正:应该显示的告诉python解释器,用什么编码来执行源代码,即:

1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3   
4 print "你好,世界"

而在python3中,改为使用默认ut-8进行编码,所以在python3中不加# -*- coding: utf-8 -*-也不会出现乱码。

编码之间的转化

在python2.7中

如果想将UTF-8转化为GBK编码,那么先要解码成unicode,然后再编码成GBK编码,即:

1 temp =  "李程"
2 # 解码 需要指定原来是什么编码
3 temp_unicode = temp.decode("utf-8')
4 # 编码 需要指定要编成什么编码
5 temp_gbk = temp_unicode.encode("gbk")

而在python3中

移除了unicode类型的编码,系统自动帮你完成内部一系列的转换,你只需要一步进行编码即可:

1 temp = "李程"
2 # 自动进行转化
3 temp_gbk = temp.encode("gbk")

Tips:

window终端默认采用的编码格式是GBK,所以UTF-8编码的代码在终端显示会乱码,但是window可以自动将unicode编码的代码转化成自己想要的编码格式,所以在window上你只需要将其他类型的编码转化成unicode即可。

转载于:https://www.cnblogs.com/yechanglv/p/6935635.html

相关文章:

  • hdu5304 Eastest Magical Day Seep Group#39;s Summer 状压dp+生成树
  • Visual Studio - 引入动态库
  • iOS private-api-checker私有API检测
  • JAVA常见算法题(十二)
  • 指针知识梳理10-指向数组的指针
  • Python入门基础:代码的编码风格
  • 中科院分词系统(NLPIR)JAVA简易教程
  • 62.Unique Paths
  • HttpClient调用api
  • 如何选择版本控制系统之三---代码托管操作
  • UVA 11324 The Largest Clique(强连通分量+缩点DAG的DP)
  • 隐马尔科夫模型HMM(四)维特比算法解码隐藏状态序列
  • Java - byte[] 和 String互相转换
  • 1.5在linux下新增大于2T的硬盘在linux下挂载操作
  • Mybatis在oracle批量更新
  • [js高手之路]搞清楚面向对象,必须要理解对象在创建过程中的内存表示
  • Angular 响应式表单之下拉框
  • es6(二):字符串的扩展
  • If…else
  • java多线程
  • Joomla 2.x, 3.x useful code cheatsheet
  • leetcode388. Longest Absolute File Path
  • Mysql5.6主从复制
  • 机器学习中为什么要做归一化normalization
  • 解决iview多表头动态更改列元素发生的错误
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 理解 C# 泛型接口中的协变与逆变(抗变)
  • 配置 PM2 实现代码自动发布
  • 前端设计模式
  • 用 Swift 编写面向协议的视图
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #{}和${}的区别是什么 -- java面试
  • #pragma data_seg 共享数据区(转)
  • (6)STL算法之转换
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (十)c52学习之旅-定时器实验
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (转)Google的Objective-C编码规范
  • (转)重识new
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • *2 echo、printf、mkdir命令的应用
  • .NET / MSBuild 扩展编译时什么时候用 BeforeTargets / AfterTargets 什么时候用 DependsOnTargets?
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .Net MVC + EF搭建学生管理系统
  • .net 后台导出excel ,word
  • .net 微服务 服务保护 自动重试 Polly
  • [bzoj 3534][Sdoi2014] 重建
  • [BZOJ2281][SDOI2011]黑白棋(K-Nim博弈)
  • [C#]C#学习笔记-CIL和动态程序集
  • [C++11 多线程同步] --- 条件变量的那些坑【条件变量信号丢失和条件变量虚假唤醒(spurious wakeup)】
  • [caffe(二)]Python加载训练caffe模型并进行测试1