• 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即可。

  • 相关阅读:
    Java中内部类中使用外面变量为什么final修饰?
    Java正则表达式
    Java内部类复习
    MyEclipse建立SpringMVC入门HelloWorld项目
    java中的System类
    java 中的Scanner
    Freemarker判断是否为空
    HQL多种查询实现
    查询功能实现
    EF生成 类型“System.Data.Entity.DbContext”在未被引用的程序集中定义
  • 原文地址:https://www.cnblogs.com/LiCheng-/p/6426186.html
Copyright © 2020-2023  润新知