在python3 encode和decode 的使用
说这个问题之前必须的介绍关于编码的在我们这的发展:
首先电脑能识别的最初的语言是二进制 ---010101这种
然后在是我们知道的ASSIC码
再过了就是 gb2312----------->gbk1.0--------->最后是gbk18030
最后国际上为了统一编制了 Unicode 但是Unicode有三个版本Unicode‘UTF——32’, 每个字符都是4个字节,一个字节8bety,但美国人民有点不愿意,随后
改编成了Unicode‘UTF——16’每个字符都是两个字节,最后改编成现在的Unicode“UTF-8”在这里面,英文用的ASSIC码一个字节(美国人民应该很高兴),然后欧洲的一些语言字符是两个字节,一个中文就是三个字节
介绍完历史,接下来就讲讲为么子要encode 和decode:最根本的原因还是各个编码只能上级包容下级,下级想读取上级就会出现乱码(简单的说就是Unicode能识别gbk,而gbk想直接Unicode就会乱码,Unicode是向下包容的)
在Python2里面(估计现在不怎么用的吧): 默认识别是ASCLL码,所以不能识别中文。而现在国内的windows默认支持识别应该是gbk
在python2中的中文想要Windows识别就得通过 声明“#!_*_ coding :UTF-8 _*_ ” 源码格式为UTF-8,这样就可以识别输入的中文,但是python2想要在window上表现出来就必须通过编码为gbk格式才行这里就可以这样:方法一(感觉这方法是个鸡肋,方法二靠谱些):(假定已经声明是UTF-8) s =‘中文巴拉巴拉 ’
s_to_Unicode=s.decode("Unicode") 将‘中文巴拉巴拉’转为Unicode格式 这时候 再将 , s_to_Unicode =s.encode('gbk') 这会儿window就能识别s了print就不会出错了这里要解释两点内容: 为什么要先解码再编码而不直接编码;还有假如encode 和decode后面不写格式会怎样(内容太多我画了个图)
s_to_Unicode=s.decode("Unicode") 但是由于Unicode是向下兼容gbk的所以这里的print(s_to_Unicode)也能被windows是被显示成和s_to_Unicode =s.encode('gbk')一样的中文,但是他们的内部排序和占的内存都不相同不同这里就不深究了;这里补充解释一下为何不见gbk直接解码成utf-8,原因是你省了一步解码 成Unicode的过程,但是电脑不会省,所以说如果直接解码为utf-8会报错 其内部默认的过程是将gbk格式先解码为python2默认的ASCLL码再编码为UTF-8这肯定会乱的撒
方法二:直接声明“#!_*_ coding :gbk _*_ ”:这样print(s)window就能识别了
在python3 里面 :python3的默认文件编码是UTF-8 但是(重点)所有的字符都是Unicode格式,所以 s =‘中文巴拉巴拉 ’ 可以被windows识别,如果你非要编码为gbk格式 这里输出的将不会是 ‘中文巴拉巴拉 ’,因为在python3里面特殊字符(即中文)编码会将其转换为另一种格式即byte字节类型,而byte类型只能识别英文等非特殊字符,所以在s =‘ i love 中文巴拉巴拉 ’编码为gbk时就能print(s)出 i love 中文巴拉巴拉 这里得到的byte类型是以gbk编码的byte类型,要转回Unicode就得解码gbk,与byte无关。python3在解码时会把byte类型转换成字符串
补充:byte类型相当于[0--255]之间的纯数字类型 在文件处理时:不同机器之间进行传输就必须用到这种类型
以下是我测试后的代码
1 a = 'hello 酷狗' #str类型》》》》Unicode2 3 #编码 str >>>>>bytes4 b = bytes(a,'utf8')5 print(b,type(b)) #b'hello \xe9\x85\xb7\xe7\x8b\x97' <class 'bytes'>6 b1 = bytes(a,'gbk')7 print(b1,type(b1)) #b'hello \xbf\xe1\xb9\xb7' <class 'bytes'>8 9 c = a.encode('utf8')
10 print(c,type(c)) #b'hello \xe9\x85\xb7\xe7\x8b\x97' <class 'bytes'>
11 c1 = a.encode('gbk')
12 print(c1,type(c1)) b'hello \xbf\xe1\xb9\xb7' <class 'bytes'>
13
14
15 #解码 bytes>>>>>str
16 d = str(b,'utf8')
17 print(d,type(d)) #hello 酷狗 <class 'str'>
18 d1 = str(b,'gbk')
19 print(d1,type(d1)) #hello 閰风嫍 <class 'str'>
20
21 d2 = str(b1,'gbk')
22 print(d2,type(d1)) #hello 酷狗 <class 'str'>
23
24 e = b.decode('utf8')
25 print(e,type(e)) #hello 酷狗 <class 'str'>
26 e2 = b1.decode('gbk')
27 print(e2,type(e2)) #hello 酷狗 <class 'str'>
View Code
在python3 encode和decode 的使用相关推荐
- python3 gb2312转utf8_python2和python3字符编码 unicode,utf-8,gb2312相互转换encode,decode...
一.预习: 1.Unicode 和utf-8之间的关系 unicode是一种编码标准,具体的实现标准可能是utf-8,utf-16,gbk -- UTF-8是Unicode的实现方式之一 2.pyth ...
- python3 的encode 和 decode
str ----> bytes: encode 编码 bytes----> str: decode 解码 str.encode() bytes.decode() >>> ...
- decode函数python在哪里_Python基础知识——encode和decode函数
以前我们介绍过,Python2.x中默认的编码的基础类型是unicode编码的类型,在Python3.x才转化为基于unicode的字符串. 那么我们在Python2.x的学习中就会遇到各种各样的编码 ...
- [转]python新手必碰到的问题---encode与decode,中文乱码--转载
edu.codepub.com/2009/1029/17037.php 这个问题在python3.0里已经解决了. 这有篇很好的文章,可以明白这个问题: 为什么会报错"UnicodeEnco ...
- python中encode用法_python3中encode和decode的一些基本用法
python3中encode和decode跟python2还是有一定的区别的,在python3中: encode(编码):按照某种规则将"文本"转换为"字节流" ...
- 2019年2月26日 Unique Email Addresses、To Lower Case、Encode and Decode TinyURL
今天开始加快速度,趁着还有空多刷几题,语言换成python提高速度了. 1. Unique Email Addresses 弱题,注意@符号前后的处理方式不同 class Solution(objec ...
- pythonunicode和str_python的str,unicode对象的encode和decode方法
python的str,unicode对象的encode和decode方法 python中的str对象其实就是"8-bit string" ,字节字符串,本质上类似java中的byt ...
- python中的encode()和decode()函数
对于很多人来说,python的中字符转码是一件很头疼的事情,本来期望结果输出的是中文,结果来一段像这样\xe4\xbd\xa0\xe5\xa5\xbd像是乱码的字符串. 由于学python没多久,昨天 ...
- Python zipfile 文件名称编码 file_name.encode(‘cp437‘).decode(‘gbk‘)
主要是处理压缩包里的中文,不出现乱码 with zipfile.ZipFile('love.zip', 'r') as zipobj: #读取压缩包for file_name in zipobj.na ...
- python str字符串和byte字节流的区别 encode、decode方法的区别
Python 3最重要的新特性之一是对字符串和二进制数据流做了明确的区分.文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示.Python 3不会以任意隐式的方式混用str和b ...
最新文章
- python类私有函数_python-面向对象-14-私有方法
- vue的鼠标移入和移出
- 2清空所有表_拉链表(二)
- idea 利用vue.js插件创建vue初始化项目
- 自己动手写网络爬虫-----(1)
- win7电脑误删鼠标键盘驱动_重装win7系统后鼠标键盘无法使用解决方法
- Unable to connect to the server: x509: certificate is valid for问题解决
- fastlane二开java_iOS中使用Fastlane实现自动化打包和发布
- zkw线段树(详解)
- 使用云祺虚拟机备份软件恢复SANFOR HCI虚拟机
- 华为海思芯片 网口烧录详解(翻遍全网资料 结合实际成功操作)
- DC-DC与LDO的区别
- python getsize函数_Python getsizeof()和getsize()区分详解
- There were errors checking the update sites: SSLHandshakeException: sun.secu解决方案
- Qt数据库应用19-图片转pdf
- 加载繁体字体时遇到的问题
- 百微秒时延,腾讯云云硬盘CBS架构深度解密
- 工业相机的传感器靶面大小
- 12月机器学习新书-《可解释机器学习局限性》最新版下载
- kube-scheduler 调度流程
热门文章
- 高德地图大头针功能_关于高德地图遇到的自定义大头针的坑
- 阅读器android工程,一种简单的纯粹——全球首款 EINK屏 安卓手机 BOOX E43 工程机测试体验...
- 微信将迎来重大更新:绑定银行卡的用户请注意
- Android intent.Action 参数值及对应功能介绍(转)
- 用UWP模仿网易云音乐的动画
- 计算机系统结构 第四章 指令级并行
- Excel2010 count,countif,countifs使用
- 电源管理芯片之 Regulator用法 Regulator framework
- android+system+disk.vdi,VirtualBox压缩VDI格式硬盘/调整磁盘大小
- python小游戏1:大鱼吃小鱼