python 2和3 字符编码
在字符编码问题上,python2 和python3 还是有点不同的.今日写篇博客,彻底理清这个问题..
字符编码问题的由来:
这要从计算发展历史来看待这个问题了,一开始,歪果仁使用ASCII码,8位(仅仅使用了7位,126个字符),一个字节,就把自己语言中所有基本字符都囊括在内,并没有考虑到别的国家字符太多,一个ASCII不够用的情况...
随着计算机的在全世界的普及,原本的ASCII不能适应,于是在ASCII基础上,诞生了unicode编码(万国码),占用2个字节.所有的字符都包含了,编码不同造成的乱码问题就解决了.
但是,全部使用了unicode编码,又带来一个问题,就是浪费...
本着不浪费的原则,又诞生出可变长编码utf8,UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。
UTF-8编码有一个额外的好处,就是ASCII编码实际上可以被看成是UTF-8编码的一部分,所以,大量只支持ASCII编码的历史遗留软件可以在UTF-8编码下继续工作。

如上图,在python2中,如果需要把utf8 转换成gbk,需要通过unicode中转.其中encode编码,decode解码..
utf8 --> unicode -->gbk
或者gbk --> unicode -->utf8
python2代码演示:
s="字符编码问题" ##utf8编码格式
s_to_unicode = s.decode("utf-8")
print(s_to_unicode) ##字符编码问题(unicode)
print(s) ##字符编码问题(utf8)
print(type(s_to_unicode),type(s),s_to_unicode,s) ##输出一个,(<type 'unicode'>, <type 'str'>),(u'\u5b57\u7b26\u7f16\u7801\u95ee\u9898', '\xe5\xad\x97\xe7\xac\xa6\xe7\xbc\x96\xe7\xa0\x81\xe9\x97\xae\xe9\xa2\x98') unicode_to_gbk = s_to_unicode.encode("gbk")
print(unicode_to_gbk) ##�ַ���������
python2 编码转换
python3 帮我们做了个优化,编码转换不需要在经过unicode了,utf8直接转成gbk,或者gbk直接转成utf8
utf8 --> gbk
gbk -->utf8
python 3代码演示:
s="字符编码问题python 3" ##utf8编码格式
s_to_gbk = s.encode("gbk")
print(s_to_gbk) ## b'\xd7\xd6\xb7\xfb\xb1\xe0\xc2\xeb\xce\xca\xcc\xe2python 3' s_to_gbk = s.encode("utf8") ##b'\xe5\xad\x97\xe7\xac\xa6\xe7\xbc\x96\xe7\xa0\x81\xe9\x97\xae\xe9\xa2\x98python 3'
print(s_to_gbk)
python3 编码转换
python3中默认使用的编码utf8,utf8中,每个汉字占用3个字节,gbk中,每个汉字占用2个字节从上面代码结果显示,可以很直观的得出..
python2中,循环读出字节,而python3中循环读出字符.
代码演示: ps:文件的编码格式和字符串的编码格式以及终端的编码格式一致才能正常的输出想要的字符串。这里单独print(i),会不正常显示..
name="字符"
for i in name:
# print(i)
print(type(i),i)
# print(i)
#结果:
(<type 'str'>, '\xe5')
(<type 'str'>, '\xad')
(<type 'str'>, '\x97')
(<type 'str'>, '\xe7')
(<type 'str'>, '\xac')
(<type 'str'>, '\xa6')
python2
代码演示:
s="字符编码问题python 3" ##utf8编码格式
for i in s:
print(i)
#结果:
字
符
编
码
问
题
p
y
t
h
o
n 3
python3
python3 比pythn2 更加友好,更加高级..所以下面还是用python3吧.
Python 3最重要的新特性大概要算是对文本和二进制数据作了更为清晰的区分。文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示。Python 3不会以任意隐式的方式混用str和bytes,正是这使得两者的区分特别清晰。你不能拼接字符串和字节包,也无法在字节包里搜索字符串(反之亦然),也不能将字符串传入参数为字节包的函数(反之亦然)。

字符串可以编码成字节包,而字节包可以解码成字符串。
演示代码:
res1 = '€20'.encode('utf-8')
res2 = b'\xe2\x82\xac20'.decode('utf-8')
print(res1,res2)
结果:
b'\xe2\x82\xac20' €20
演示代码
先介绍2个函数: bytes() 和str()
bytes():
作用:将字符转成字节,
def __init__(self, value=b'', encoding=None, errors='strict'): # known special case of bytes.__init__
"""
bytes(iterable_of_ints) -> bytes
bytes(string, encoding[, errors]) -> bytes
bytes(bytes_or_buffer) -> immutable copy of bytes_or_buffer
bytes(int) -> bytes object of size given by the parameter initialized with null bytes
bytes() -> empty bytes object Construct an immutable array of bytes from:
- an iterable yielding integers in range(256)
- a text string encoded using the specified encoding
- any object implementing the buffer API.
- an integer
# (copied from class doc)
"""
pass
bytes()
str():
def __init__(self, value='', encoding=None, errors='strict'): # known special case of str.__init__
"""
str(object='') -> str
str(bytes_or_buffer[, encoding[, errors]]) -> str Create a new string object from the given object. If encoding or
errors is specified, then the object must expose a data buffer
that will be decoded using the given encoding and error handler.
Otherwise, returns the result of object.__str__() (if defined)
or repr(object).
encoding defaults to sys.getdefaultencoding().
errors defaults to 'strict'.
# (copied from class doc)
"""
pass
str()
一个简单的题目:将你的名字,转成2进制显示出来(python 3)
name = "张三"
for i in name:
i_bytes = bytes(i,encoding='utf8')
for i in i_bytes:
print(bin(i))
结果:
0b11100101
0b10111100
0b10100000
0b11100100
0b10111000
0b10001001
题目代码
python 2和3 字符编码的更多相关文章
- python之旅:字符编码
一 了解字符编码的知识储备 一 计算机基础知识 知识储备:cpu.内存.硬盘 二 文本编辑器存取文件的原理(nodepad++,pycharm,word) #1.打开编辑器就打开了启动了一个进程,是在 ...
- python基础——6(字符编码,文件操作)
今日内容: 1.字符编码: 人识别的语言与机器识别的语言转化的媒介 ***** 2.字符与字节: 字符占多少字节,字符串转化 *** 3.文件操作: 操作硬盘中的一块区域:读写操作 ...
- python文件操作:字符编码与文件处理
一.字符编码 二.文件处理 一.字符编码 储备知识点: 1. 计算机系统分为三层: 应用程序 操作系统 计算机硬件 2. 运行python程序的三个步骤 1. 先启动python解释器 2. 再将py ...
- python标准库之字符编码详解
codesc官方地址:https://docs.python.org/2/library/codecs.html 相关帮助:http://www.cnblogs.com/huxi/archive/20 ...
- 小白的Python之路 day1 字符编码
字符编码 python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill) ASCII(American Standard Code for Information Interc ...
- Python 入门基础6 --字符编码、文件操作1
今日内容: 1.字符编码 2.字符与字节 3.文件操作 一.字符编码 了解: cpu:将数据渲染给用户 内存:临时存放数据,断电消失 硬盘:永久存放数据,断电后不消失 1.1 什么是编码? 人类能够识 ...
- python文件操作与字符编码
知识内容: 1.文件对象与文件处理流程 2.基本操作 3.上下文管理 4.文件的修改与文件内光标的移动 5.字符编码 一.文件对象与文件处理流程 1.文件对象 (1)文件分类 按文件中数据的组织形式可 ...
- Python 3 文件和字符编码
一.文件: 打开文件的模式有: r,只读模式(默认). w,只写模式. 不可读,不存在则创建:存在则删除内容 a,追加模式. 可读,不存在则创建:存在则只追加内容 "+"表示可以 ...
- python开发基础之字符编码、文件处理和函数基础
字符编码 为什么要有字符编码? 字符编码是为了让计算机能识别我们人写的字符,因为计算机只认识高低电平,也就是二进制数"0","1". 一个文件用什么编码方式存储 ...
- 【python】-- 字符串、字符编码与转码
字符串 字符串是 Python 中最常用的数据类型.我们可以使用引号('或")来创建字符串. 创建字符串很简单,只要为变量分配一个值即可:访问子字符串,可以使用方括号来截取字符串: var1 ...
随机推荐
- 源码编译Redis Desktop Manager | 懒人屋
原文:源码编译Redis Desktop Manager | 懒人屋 源码编译Redis Desktop Manager 2.3k 字 10 分钟 2019-10-10 文章背景 本 ...
- luogu P1224 [NOI2013]向量内积
传送门 挺有意思的一道题 暴力60就是枚举每个向量暴力check,随机选向量就能多骗一些分 然后两个向量内积要模\(k\)为\(0\),那么如果全部不为\(0\)就不合法.先考虑\(k=2\),对于向 ...
- mac chromedriver error
问题一:MAC 使用splinter error Traceback (most recent call last): from splinter.browser import Browser b = ...
- maven项目pom.xml报错: Failure to transfer org.apache.maven.plugins:maven-surefire-plugin:pom:2.7.1 from
转自:https://blog.csdn.net/wolf1213hao/article/details/53413093
- background的水平条纹和斜向条纹
水平条纹: <div id="div1"> </div> linear-gradient属性 #div1{ width: 100px; height: 10 ...
- Codeforces 934 最长不递减子序列 多项式系数推导
A B C 给你一个长度为N的01串 你可以翻转一次任意[L,R]的区间 问你最长的不递减序列为多少长 处理出1的前缀和 和2的后缀和 然后N^2 DP 处理出 [L,R]区间的最长不递增序列 #in ...
- vue 之 双向绑定原理
一.实现双向绑定 详细版: 前端MVVM实现双向数据绑定的做法大致有如下三种: 1.发布者-订阅者模式(backbone.js) 思路:使用自定义的data属性在HTML代码中指明绑定.所有绑定起来的 ...
- bzoj3510 首都 LCT 维护子树信息+树的重心
题目传送门 https://lydsy.com/JudgeOnline/problem.php?id=3510 题解 首先每一个连通块的首都根据定义,显然就是直径. 然后考虑直径的几个性质: 定义:删 ...
- ZROI 19.07.28 组合计数/lb
T1 题意:\(n\)个变量,\(0 \leq x_i \leq c_i\),求\(\sum x_i = A\)方案数.\(n \leq 32\). Sol: \(n \leq 10\)的时候容斥很水 ...
- jquery 对于新插入的节点 的操作绑定(点击事件,each等)
因为最近项目遇到这个问题,下面给大家带来一篇Jquery对新插入的节点 获取并对这个节点绑定事件失效的解决方法.我觉得挺不错的,大家也可以参考一下: 对于绑定事件来讲: 方法一:使用liv ...