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.yang
import sys
print("系统默认编码是:", 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兼容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")) 输出如下:
# 系统默认编码是: 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'
# 世界你好
# 世界你好
# 世界你好
# 世界你好
python3.x 基础三:字符集问题的更多相关文章
- python3.x 基础三:装饰器
装饰器:本质是函数,用于装饰其他函数,在不改变其他函数的调用和代码的前提下,增加新功能 原则: 1.不能修改被装饰函数的源代码 2.不能修改被装饰函数的调用方式 3.装饰函数对于被装饰函数透明 参考如 ...
- python3.x 基础三:函数
1.OOP 面向对象编程,万物皆对象,以class为主,抽象化 2.POP 面向过程变成,万事皆过程,def定义过程 3.函数式编程,将某种功能封装起来,用的时候直接调用函数名,def定义函数,也叫f ...
- python3.x 基础三:文件IO
打开文件的两种方式 1.直接打开文件并赋值给变量,打开后得到操作句柄,但不会自动关闭 file = open('文件名‘,'打开模式',’编码‘) fd = open('../config/file1 ...
- python3.x 基础三:set集合
集合,set(),记住: 1个特点:去重,把列表变成集合,达到自动去重操作,无序 5个关系:测试两个列表的交差并子反向差集 方法: | add(...) 常用,已存在元素去重不生效 | A ...
- Python全栈开发【基础三】
Python全栈开发[基础三] 本节内容: 函数(全局与局部变量) 递归 内置函数 函数 一.定义和使用 函数最重要的是减少代码的重用性和增强代码可读性 def 函数名(参数): ... 函数体 . ...
- Bootstrap <基础三十二>模态框(Modal)插件
模态框(Modal)是覆盖在父窗体上的子窗体.通常,目的是显示来自一个单独的源的内容,可以在不离开父窗体的情况下有一些互动.子窗体可提供信息.交互等. 如果您想要单独引用该插件的功能,那么您需要引用 ...
- Bootstrap <基础三十一>插件概览
在前面布局组件中所讨论到的组件仅仅是个开始.Bootstrap 自带 12 种 jQuery 插件,扩展了功能,可以给站点添加更多的互动.即使不是一名高级的 JavaScript 开发人员,也可以着手 ...
- Bootstrap <基础三十>Well
Well 是一种会引起内容凹陷显示或插图效果的容器 <div>.为了创建 Well,只需要简单地把内容放在带有 class .well 的 <div> 中即可.下面的实例演示了 ...
- Bootstrap<基础三> 排版
Bootstrap 使用 Helvetica Neue. Helvetica. Arial 和 sans-serif 作为其默认的字体栈. 使用 Bootstrap 的排版特性,您可以创建标题.段落. ...
随机推荐
- markdownPad常用功能示例
1.列表 无序列表 姓名 张三 李四 王五 有序列表 张三 李四 王五 2.超链接 百度 3.引用 锄禾日当午,汗滴禾下土.谁知盘中餐,粒粒皆辛苦. -- 李绅<古风二首> 4.简要修饰文 ...
- Openstack object list 一次最多有一万个 object
When you request a list of containers or objects, Object Storage returns a maximum of 10,000 names f ...
- 最大比例 公约数复用 【蓝桥真题】 (c++)
最大比例 X星球的某个大奖赛设了M级奖励.每个级别的奖金是一个正整数.并且,相邻的两个级别间的比例是个固定值.也就是说:所有级别的奖金数构成了一个等比数列.比如:16,24,36,54其等比值为:3/ ...
- Axure遮罩 or 灯箱
2019独角兽企业重金招聘Python工程师标准>>> 在做原型设计的时候,常常需要设计弹窗(比如confirm.alert或者弹出面板),加一个全屏的遮罩可以突出要展示的内容,效果 ...
- Aurora: 来自 Amazon 的高性能的企业级关系数据库,兼容 MySQL
近日,在美国召开的AWS re:Invent云计算大会上,Amazon高级副总裁安迪·杰西发布了企业级关系数据库Aurora.Aurora是一个面向Amazon RDS(关系数据库服务).兼容MySQ ...
- CodeForces - 1245 C - Constanze's Machine
Codeforces Round #597 (Div. 2) Constanze is the smartest girl in her village but she has bad eyesigh ...
- 基于UDP的客户端和服务器端的代码设计
实验平台 linux 实验内容 编写UDP服务器和客户端程序,客户端发送消息,服务器接收消息,并打印客户端的IP地址和端口号. 实验原理 UDP是无需连接的通信,其主要实现过程如下: 同样,我们可以按 ...
- 题目分享T
题意:蛐蛐国里现在共有n只蚯蚓(n为正整数).每只蚯蚓拥有长度,我们设第i只蚯蚓的长度为a_i(i=1,2,...,n),并保证所有的长度都是非负整数(即:可 能存在长度为0的蚯蚓).每一秒,神刀手会 ...
- 题目分享L
题意:n个人围成一个环,每个人初始有一些金币,每个人可以把金币递给相邻的人,问最少传递多少金币使每个人金币数相同? 分析:首先在保证最优的情况下不可能会出现相邻的两个人互相送金币,因为这样他们公共的部 ...
- 「从零单排HBase 09」Hbase的那些数据结构和算法
在之前学习MySQL的时候,我们知道存储引擎常用的索引结构有B+树索引和哈希索引. 而对HBase的学习,也离不开索引结构的学习,它使用了一种LSM树((Log-Structured Merge-Tr ...