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

序号 年份 编码 标准协会 特点 二进制长度 字符长度 表现
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解码
>>> import sys
>>> print("系统默认编码是:",sys.getdefaultencoding())
('\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')
>>> s = "你好"
>>> s_to_gbk = s.encode("gbk")
Traceback (most recent call last):File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)
>>> s_to_gbk = s.decode().encode("gbk")
Traceback (most recent call last):File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)

  • 需要进行一次明确解码
>>> s = "你好"
>>> s_to_unicode = s.decode("utf-8")
>>> print(s_to_unicode)
你好
>>> s_to_gbk = s_to_unicode.encode("gbk")
>>> print(s_to_gbk)    #终端切换成GBK可以正常显示
▒▒▒
>>> gbk_to_utf8 = s_to_gbk.decode("gbk").encode("utf-8")
>>> print(gbk_to_utf8)
你好
>>>#python2.7 字符串 -> unicode -> decode(原编码) -> encode(目标编码

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

>>> import sys
>>> print("系统默认编码是:",sys.getdefaultencoding())
('\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')
>>>
>>> s = "你好"
>>> s_to_gb2312 = s.decode("utf-8").encode("gb2312")
>>> print(s_to_gb2312)  #终端编码为gb2312可以正常显示
▒▒▒
>>> s_to_gb2312_to_utf8 = s_to_gb2312.decode("gb2312").encode("utf-8")
>>> print(s_to_gb2312_to_utf8)
你好
>>> s_to_gb2312_to_utf8_to_gbk = s_to_gb2312_to_utf8.decode("utf-8").encode("gbk")
>>> print(s_to_gb2312_to_utf8_to_gbk) ##终端编码为gbk可以正常显示
▒▒▒
>>> 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编码格式,与文件格式无关
# /usr/bin/env python# -*- coding: gbk -*-# Author:jenvid.yangimport sysprint("系统默认编码是:", sys.getdefaultencoding())msg = '世界你好'# unicode程序编码,文件头部定义的是文件编码msg_unicode_to_gbk = msg.encode("gbk")# 已经是unicode,只能encode成其他编码print("unicode -> gbk: ",msg_unicode_to_gbk)

msg_unicode_to_utf8 = msg.encode("utf-8")print("unicode -> utf8: ",msg_unicode_to_utf8)

msg_unicode_to_gb2312 = msg.encode("gb2312")print("unicode -> gb2312: ",msg_unicode_to_gb2312)

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)

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兼容gb2312print(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"))

输出如下:
# 系统默认编码是: 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'# 世界你好# 世界你好# 世界你好# 世界你好
 

转载于:https://www.cnblogs.com/jenvid/p/7826144.html

python3.x 基础三:字符集问题相关推荐

  1. python基础教程教材-Python3零基础教材电子书合集

    Python3零基础教材电子书合集,传送门:https://www.52pojie.cn/thread-676318-1-1.html 一.<Python编程从入门到实践> 链接:http ...

  2. Python3算法基础练习:编程100例( 21~ 25)

    往期练习: Python3算法基础练习:编程100例(1~5) Python3算法基础练习:编程100例(6 ~ 10) Python3算法基础练习:编程100例(11 ~ 15) Python3算法 ...

  3. Python3算法基础练习:编程100例(11 ~ 15)

    往期练习: Python3算法基础练习:编程100例(1~5) Python3算法基础练习:编程100例(6 ~ 10) Python3算法基础练习:编程100例(11 ~ 15) 11.兔子问题 1 ...

  4. Python3算法基础练习:编程100例( 31 ~ 35 )

    上期文章: Python3算法基础练习:编程100例( 26 ~ 30) 目录 31 判断星期几 32 反序输出列表 33 分隔列表 34 函数调用 35 文本加颜色 31 判断星期几 题目:请输入星 ...

  5. Python3算法基础练习:编程100例( 26 ~ 30)

    上期文章: Python3算法基础练习:编程100例( 21~ 25) 目录 26 递归求 20! 的阶乘 27 字符串反转 28 猜岁数 29 整数打印每一位数字 30 回文数 26 递归求 20! ...

  6. python零基础自学教材-Python3零基础教材电子书合集

    Python3零基础教材电子书合集,传送门:https://www.52pojie.cn/thread-676318-1-1.html 一.<Python编程从入门到实践> 链接:http ...

  7. Python3之基础语法

    Python3之基础语法 编码 默认:源码文件以UTF-8编码,字符串都是unicode字符串 指定: # -*- coding: cp-1252 -*- 标识符 第一个字符:字母表中的字符或下划线 ...

  8. 0基础学Python第四天:Python3的基础语法

    文章目录 目录 文章目录 前言 一.Python3基础语法 二.编码 三.标识符 四.Python保留字 五.注释 六.行和缩进 七.多行语句 八.数字类型 九:字符串 十.空行 十一.同一行显示多条 ...

  9. python入门电子版-Python3零基础教材电子书合集

    Python3零基础教材电子书合集,传送门:https://www.52pojie.cn/thread-676318-1-1.html 一.<Python编程从入门到实践> 链接:http ...

最新文章

  1. 【NLP_Stanford课堂】正则表达式
  2. C语言 | 卡尔曼滤波算法2——算法分析
  3. opencv+pythons相机标定源码解析
  4. mysql中获取时间的年月日_关于苹果ios中的Date()获取时间NaN的问题
  5. C语言数据类型从计算机原理的角度是怎样看待的?
  6. 动态规划问题中找零问题 --C语言实现
  7. resnet网络结构_ResNet网络详细解析(超详细哦)
  8. 总结了 110+ 公开专业数据集
  9. 小技巧!Win10系统怎样恢复使用Win7中的照片查看器?非常简单!
  10. 文件夹有个蓝色箭头_带有双蓝色箭头的Windows文件夹图标是什么意思?
  11. 总结!通过网站设置解决谷歌浏览器不能自动播放音频问题的方案
  12. 曲线拟合的数值方法——《数值计算方法》
  13. 诛仙一直服务器维护,服务器维护《诛仙3》官方致仙友的一封信
  14. 【Rust日报】2021-09-05 perseus:完全支持 SSR 和 SSG 的 Rust 高端前端开发框架
  15. 令克软件格隆汇——携手推进合作,共创金融IT持续发展
  16. php引擎,PHP撮合引擎
  17. [ 生成函数 ] Codeforces891E Lust
  18. android音乐播放器之歌词下载、处理、开始、同步
  19. 电机轴承故障相关的开源数据(不断更新中)
  20. Kaggle时间序列(Time Series)教程 2-趋势(Trend)

热门文章

  1. 坚果Pro续航能力超强?如果这个东西质量不合格也白搭
  2. RabbitMQ入门指南:初学者也能读懂的教程
  3. haskell-win10安装配置
  4. hexo-admin快速发布博客
  5. MVC,WebAPi,WebService区别
  6. 【统计学习方法】K-近邻法
  7. 利用Excel实现度分秒转换十进制度
  8. TextView系列:ellipsize属性详解 android:ellipsize=“marquee“(跑马灯效果)
  9. 手把手教你画活动图,再无难搞的流程分析
  10. Ubuntu上Pulse Secure不能用 openconnect来救急~