总结了一张表,更详细信息百度百科:

序号 年份 编码 标准协会 特点 二进制长度 字符长度 表现
1 1967 ASCII 美国国家标准学会
(American National Standard Institute , ANSI )
只能表示英文/数字/控制符符/现世符
不能表示中文
7位或8位二进制数组 1个字节 0~31,127(共33位)表示控制字符或者通信专用字符
32~126(共95为)表示字符,32是空格
    48~57表示0~9个阿拉伯数字
65~90表示26个大写英文字母
97~122表示26个小写英文字母
其他表示标点符号和运算符号等
128~255是扩展ASCII,每个字符的第8位用于确定附加的128个特俗符号字符/图形/外来字母
2 1981 GB2312 中国国家标准总局 可以表示中文,图形字符
古汉字不能支持
2组8进制位 2个字节 3755个一级汉字
3008个二级汉字
682个拉丁/希腊字母/日文片假名/片假名字母/俄语西里尔字母
3 1995 GBK 中华人民共和国
全国信息技术标准化技术委员会
兼容GB2312
windowns中文版系统的编码
2组8进制位 2个字节 GB 2312 中的全部汉字、非汉字符号。
BIG5 中的全部汉字。
与 ISO 10646 相应的国家标准 GB 13000 中的其它 CJK 汉字,以上合计 20902 个汉字。
其它汉字、部首、符号,共计 984 个。
4 2001 GB18030 信息产业部和国家质量技术监督局 1字节与ASCII兼容
2字节与DBK兼容
  1/2/4个字节 70244多个,各种少数民族字符
5 1994 Unicode 非营利机构统一码联盟 跨语言跨平台
英文浪费一半以上空间存储
至少2个字节 英文1个字节
中文2个字节
16位来统一表示所有的字符
原来8位全部扩充到16位
6 6 UTF-8 Ken Thompson
RFC 3629
Unicode实现方式
伴随互联网出现
每次传输8位数据
使编码无国界
万国码
可变长 ASCII1个字节
欧洲字符2个字节
中文3个字节
编码体积大

python2.7

  • 默认编码集是ASCII,如果直接encode(编码集),默认进行一次ascii解码
  1. >>> import sys
  2. >>> print("系统默认编码是:",sys.getdefaultencoding())
  3. ('\xe7\xb3\xbb\xe7\xbb\x9f\xe9\xbb\x98\xe8\xae\xa4\xe7\xbc\x96\xe7\xa0\x81\xe6\x98\xaf\xef\xbc\x9a', 'ascii')
  4. >>> s = "你好"
  5. >>> s_to_gbk = s.encode("gbk")
  6. Traceback (most recent call last):
  7. File "<stdin>", line 1, in <module>
  8. UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)
  9. >>> s_to_gbk = s.decode().encode("gbk")
  10. Traceback (most recent call last):
  11. File "<stdin>", line 1, in <module>
  12. UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)
  • 需要进行一次明确解码
  1. >>> s = "你好"
  2. >>> s_to_unicode = s.decode("utf-8")
  3. >>> print(s_to_unicode)
  4. 你好
  5. >>> s_to_gbk = s_to_unicode.encode("gbk")
  6. >>> print(s_to_gbk) #终端切换成GBK可以正常显示
  7. ▒▒▒
  8. >>> gbk_to_utf8 = s_to_gbk.decode("gbk").encode("utf-8")
  9. >>> print(gbk_to_utf8)
  10. 你好
  11. >>>
    #python2.7 字符串 -> unicode -> decode(原编码) -> encode(目标编码

GB2312 -> UTF8 -> GBK -> UTF8 -> GB2312

  1. >>> import sys
  2. >>> print("系统默认编码是:",sys.getdefaultencoding())
  3. ('\xe7\xb3\xbb\xe7\xbb\x9f\xe9\xbb\x98\xe8\xae\xa4\xe7\xbc\x96\xe7\xa0\x81\xe6\x98\xaf\xef\xbc\x9a', 'ascii')
  4. >>>
  5. >>> s = "你好"
  6. >>> s_to_gb2312 = s.decode("utf-8").encode("gb2312")
  7. >>> print(s_to_gb2312) #终端编码为gb2312可以正常显示
  8. ▒▒▒
  9. >>> s_to_gb2312_to_utf8 = s_to_gb2312.decode("gb2312").encode("utf-8")
  10. >>> print(s_to_gb2312_to_utf8)
  11. 你好
  12. >>> s_to_gb2312_to_utf8_to_gbk = s_to_gb2312_to_utf8.decode("utf-8").encode("gbk")
  13. >>> print(s_to_gb2312_to_utf8_to_gbk) ##终端编码为gbk可以正常显示
  14. ▒▒▒
  15. >>> s_to_gb2312_to_utf8_to_gbk_to_utf8 = s_to_gb2312_to_utf8_to_gbk.decode("gbk").encode("utf-8")
    >>> print(s_to_gb2312_to_utf8_to_gbk_to_utf8)
    你好
    >>> s_to_gb2312_to_utf8_to_gbk_to_utf8_to_gb2312 = s_to_gb2312_to_utf8_to_gbk_to_utf8.decode("utf-8").encode("gb2312")
    >>> print s_to_gb2312_to_utf8_to_gbk_to_utf8_to_gb2312
    ▒▒▒

python3.5

  • 默认编码是unicode
  • 文件头部coding:gbk定义文件编码格式
  • 但是程序本身依然是unicode编码格式,与文件格式无关
  1.  
  1. # /usr/bin/env python
    # -*- coding: gbk -*-
    # Author:jenvid.yang
    import sys
    print("系统默认编码是:", sys.getdefaultencoding())
    msg = '世界你好'
    # unicode程序编码,文件头部定义的是文件编码
    msg_unicode_to_gbk = msg.encode("gbk")
    # 已经是unicode,只能encode成其他编码
    print("unicode -> gbk: ",msg_unicode_to_gbk)
  2.  
  3. msg_unicode_to_utf8 = msg.encode("utf-8")
    print("unicode -> utf8: ",msg_unicode_to_utf8)
  4.  
  5. msg_unicode_to_gb2312 = msg.encode("gb2312")
    print("unicode -> gb2312: ",msg_unicode_to_gb2312)
  6.  
  7. msg_unicode_to_utf8_to_gbk = msg_unicode_to_utf8.decode("utf-8").encode("gbk")
    # 默认decode成utf-8,可以不写,显示指定
    print("unicode -> utf8 -> gbk: ",msg_unicode_to_utf8_to_gbk)
  8.  
  9. msg_unicode_to_utf8_to_gbk =msg_unicode_to_utf8.decode("utf-8").encode("gb2312")
    # 默认decode成utf-8,可以不写,但显示指定
    print("unicode -> utf8 -> gb2312: ",msg_unicode_to_utf8_to_gbk)
    # gbk兼容gb2312
    print(msg_unicode_to_utf8.decode("utf-8").encode("gb2312").decode("gb2312"))
    print(msg.encode("utf-8").decode("utf-8"))
    # decode的时候将字节码转换成字符串
    # 用str方法指定原编码也可以转换成字符串
    print(str(msg_unicode_to_utf8,encoding="utf-8"))
    print(str(msg_unicode_to_gb2312,encoding="gb2312"))
  10.  
  11. 输出如下:
  1.  
  1. # 系统默认编码是: utf-8
    # unicode -> gbk: b'\xca\xc0\xbd\xe7\xc4\xe3\xba\xc3'
    # unicode -> utf8: b'\xe4\xb8\x96\xe7\x95\x8c\xe4\xbd\xa0\xe5\xa5\xbd'
    # unicode -> gb2312: b'\xca\xc0\xbd\xe7\xc4\xe3\xba\xc3'
    # unicode -> utf8 -> gbk: b'\xca\xc0\xbd\xe7\xc4\xe3\xba\xc3'
    # unicode -> utf8 -> gb2312: b'\xca\xc0\xbd\xe7\xc4\xe3\xba\xc3'
    # 世界你好
    # 世界你好
    # 世界你好
    # 世界你好
  1.  

python3.x 基础三:字符集问题的更多相关文章

  1. python3.x 基础三:装饰器

    装饰器:本质是函数,用于装饰其他函数,在不改变其他函数的调用和代码的前提下,增加新功能 原则: 1.不能修改被装饰函数的源代码 2.不能修改被装饰函数的调用方式 3.装饰函数对于被装饰函数透明 参考如 ...

  2. python3.x 基础三:函数

    1.OOP 面向对象编程,万物皆对象,以class为主,抽象化 2.POP 面向过程变成,万事皆过程,def定义过程 3.函数式编程,将某种功能封装起来,用的时候直接调用函数名,def定义函数,也叫f ...

  3. python3.x 基础三:文件IO

    打开文件的两种方式 1.直接打开文件并赋值给变量,打开后得到操作句柄,但不会自动关闭 file = open('文件名‘,'打开模式',’编码‘) fd = open('../config/file1 ...

  4. python3.x 基础三:set集合

    集合,set(),记住: 1个特点:去重,把列表变成集合,达到自动去重操作,无序 5个关系:测试两个列表的交差并子反向差集 方法: |  add(...) 常用,已存在元素去重不生效 |      A ...

  5. Python全栈开发【基础三】

    Python全栈开发[基础三]  本节内容: 函数(全局与局部变量) 递归 内置函数 函数 一.定义和使用 函数最重要的是减少代码的重用性和增强代码可读性 def 函数名(参数): ... 函数体 . ...

  6. Bootstrap <基础三十二>模态框(Modal)插件

    模态框(Modal)是覆盖在父窗体上的子窗体.通常,目的是显示来自一个单独的源的内容,可以在不离开父窗体的情况下有一些互动.子窗体可提供信息.交互等. 如果您想要单独引用该插件的功能,那么您需要引用  ...

  7. Bootstrap <基础三十一>插件概览

    在前面布局组件中所讨论到的组件仅仅是个开始.Bootstrap 自带 12 种 jQuery 插件,扩展了功能,可以给站点添加更多的互动.即使不是一名高级的 JavaScript 开发人员,也可以着手 ...

  8. Bootstrap <基础三十>Well

    Well 是一种会引起内容凹陷显示或插图效果的容器 <div>.为了创建 Well,只需要简单地把内容放在带有 class .well 的 <div> 中即可.下面的实例演示了 ...

  9. Bootstrap<基础三> 排版

    Bootstrap 使用 Helvetica Neue. Helvetica. Arial 和 sans-serif 作为其默认的字体栈. 使用 Bootstrap 的排版特性,您可以创建标题.段落. ...

随机推荐

  1. springboot中Redis的Lettuce客户端和jedis客户端

    1.引入客户端依赖 <!--jedis客户端依赖--> <dependency> <groupId>redis.clients</groupId> &l ...

  2. zabbix监控ftp

    [root@agent ~]# yum -y install vsftpd [root@agent ~]# systemctl start vsftpd[root@agent ~]# systemct ...

  3. Uva 1754 Posterize

    #include<bits/stdc++.h> using namespace std; #define rep(i,a,b) for(int i=a;i<=b;++i) #defi ...

  4. Highcharts的自适应DOM或者DIV,JS方法实现

    那我们就按照官网的一分钟极速入门代码来说 // 图表配置 var options = { chart: { type: 'bar' //指定图表的类型,默认是折线图(line) }, title: { ...

  5. Linux下实现文件共享配置[samba]

    Linux下实现文件共享配置[samba] 第一步:安装samba软件 1.命令:rpm –q samba #查询是否已安装sambayum install samba #使用yum源安装samba, ...

  6. 数学--数论--HDU1825(积性函数性质+和函数公式+快速模幂+非互质求逆元)

    As we all know, the next Olympic Games will be held in Beijing in 2008. So the year 2008 seems a lit ...

  7. C++--浅谈开发系统的经验

    最近写了不少类了,从垃圾代码爬坑,虽然还是很垃圾,但是照葫芦画瓢,有几分神韵.在这里总结一下,写类的经验教训. 第一步 分析: 当拿到一个要求时,要先去考虑怎样一个类到底该实现什么样的功能,有什么样的 ...

  8. 有向图强连通分量SCC(全网最好理解)

    定义: 在有向图中,如果一些顶点中任意两个顶点都能互相到达(间接或直接),那么这些顶点就构成了一个强连通分量,如果一个顶点没有出度,即它不能到达其他任何顶点,那么该顶点自己就是一个强连通分量. 做题的 ...

  9. 网络流二十四题,题解summary

    没有全部写完,有几题以后再补吧. 第一题:最简单的:飞行员配对方案问题 讲讲这个题目为什么可以用网络流? 因为这个题目是要进行两两之间的匹配,这个就可以想到用二分图匹配,二分图匹配又可以用网络流写. ...

  10. vue.prototype和vue.use的区别和注意点

    1.vue.prototype:实例上挂载属性/方法,例如Vue.prototype.axios = axios; 2.vue.use:引入插件,例如vuex,vue.use(vuex)如图,vue. ...