python3.x 基础三:字符集问题
总结了一张表,更详细信息百度百科:
序号 | 年份 | 编码 | 标准协会 | 特点 | 二进制长度 | 字符长度 | 表现 |
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 基础三:字符集问题相关推荐
- python基础教程教材-Python3零基础教材电子书合集
Python3零基础教材电子书合集,传送门:https://www.52pojie.cn/thread-676318-1-1.html 一.<Python编程从入门到实践> 链接:http ...
- Python3算法基础练习:编程100例( 21~ 25)
往期练习: Python3算法基础练习:编程100例(1~5) Python3算法基础练习:编程100例(6 ~ 10) Python3算法基础练习:编程100例(11 ~ 15) Python3算法 ...
- Python3算法基础练习:编程100例(11 ~ 15)
往期练习: Python3算法基础练习:编程100例(1~5) Python3算法基础练习:编程100例(6 ~ 10) Python3算法基础练习:编程100例(11 ~ 15) 11.兔子问题 1 ...
- Python3算法基础练习:编程100例( 31 ~ 35 )
上期文章: Python3算法基础练习:编程100例( 26 ~ 30) 目录 31 判断星期几 32 反序输出列表 33 分隔列表 34 函数调用 35 文本加颜色 31 判断星期几 题目:请输入星 ...
- Python3算法基础练习:编程100例( 26 ~ 30)
上期文章: Python3算法基础练习:编程100例( 21~ 25) 目录 26 递归求 20! 的阶乘 27 字符串反转 28 猜岁数 29 整数打印每一位数字 30 回文数 26 递归求 20! ...
- python零基础自学教材-Python3零基础教材电子书合集
Python3零基础教材电子书合集,传送门:https://www.52pojie.cn/thread-676318-1-1.html 一.<Python编程从入门到实践> 链接:http ...
- Python3之基础语法
Python3之基础语法 编码 默认:源码文件以UTF-8编码,字符串都是unicode字符串 指定: # -*- coding: cp-1252 -*- 标识符 第一个字符:字母表中的字符或下划线 ...
- 0基础学Python第四天:Python3的基础语法
文章目录 目录 文章目录 前言 一.Python3基础语法 二.编码 三.标识符 四.Python保留字 五.注释 六.行和缩进 七.多行语句 八.数字类型 九:字符串 十.空行 十一.同一行显示多条 ...
- python入门电子版-Python3零基础教材电子书合集
Python3零基础教材电子书合集,传送门:https://www.52pojie.cn/thread-676318-1-1.html 一.<Python编程从入门到实践> 链接:http ...
最新文章
- 【NLP_Stanford课堂】正则表达式
- C语言 | 卡尔曼滤波算法2——算法分析
- opencv+pythons相机标定源码解析
- mysql中获取时间的年月日_关于苹果ios中的Date()获取时间NaN的问题
- C语言数据类型从计算机原理的角度是怎样看待的?
- 动态规划问题中找零问题 --C语言实现
- resnet网络结构_ResNet网络详细解析(超详细哦)
- 总结了 110+ 公开专业数据集
- 小技巧!Win10系统怎样恢复使用Win7中的照片查看器?非常简单!
- 文件夹有个蓝色箭头_带有双蓝色箭头的Windows文件夹图标是什么意思?
- 总结!通过网站设置解决谷歌浏览器不能自动播放音频问题的方案
- 曲线拟合的数值方法——《数值计算方法》
- 诛仙一直服务器维护,服务器维护《诛仙3》官方致仙友的一封信
- 【Rust日报】2021-09-05 perseus:完全支持 SSR 和 SSG 的 Rust 高端前端开发框架
- 令克软件格隆汇——携手推进合作,共创金融IT持续发展
- php引擎,PHP撮合引擎
- [ 生成函数 ] Codeforces891E Lust
- android音乐播放器之歌词下载、处理、开始、同步
- 电机轴承故障相关的开源数据(不断更新中)
- Kaggle时间序列(Time Series)教程 2-趋势(Trend)
热门文章
- 坚果Pro续航能力超强?如果这个东西质量不合格也白搭
- RabbitMQ入门指南:初学者也能读懂的教程
- haskell-win10安装配置
- hexo-admin快速发布博客
- MVC,WebAPi,WebService区别
- 【统计学习方法】K-近邻法
- 利用Excel实现度分秒转换十进制度
- TextView系列:ellipsize属性详解 android:ellipsize=“marquee“(跑马灯效果)
- 手把手教你画活动图,再无难搞的流程分析
- Ubuntu上Pulse Secure不能用 openconnect来救急~