在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]之间的纯数字类型 在文件处理时:不同机器之间进行传输就必须用到这种类型
在python3 encode和decode 的使用的更多相关文章
- (十一)python3 encode()和decode()
从英文意思上看,encode和decode分别指编码和解码.在python中,Unicode类型是作为编码的基础类型,即: decode encode str ---------> str(Un ...
- python3的encode()和decode()
python3的encode()和decode() 在python3的内存中. 在程序运行阶段. 使⽤用的是unicode编码. 因为unicode是万国码. 什么内容都可以进行显示. 那么在数据传输 ...
- python encode和decode函数说明【转载】
python encode和decode函数说明 字符串编码常用类型:utf-8,gb2312,cp936,gbk等. python中,我们使用decode()和encode()来进行解码和编码 在p ...
- [转]python新手必碰到的问题---encode与decode,中文乱码--转载
edu.codepub.com/2009/1029/17037.php 这个问题在python3.0里已经解决了. 这有篇很好的文章,可以明白这个问题: 为什么会报错“UnicodeEncodeErr ...
- Python学习-is和==区别, encode和decode
一.is 和 == 介绍 1. is 比较的是两个对象的内存地址是否相同,它们是不是同一个对象. 2. == 比较的是两个对象的内容是否相同. 在使用is前,先介绍Python的一个内置函数id( ...
- python 的 encode 、decode、字节串、字符串
一.摆个图 DJ DJ DJ Decode. J 解码 首先得知道字符串有哪些编码格式,至于为什么会有这么多的编码格式,以后再了解更新. 1.ASCII 占1个字节,只支持英文 2.GB231 ...
- python的str,unicode对象的encode和decode方法, Python中字符编码的总结和对比bytes和str
python_2.x_unicode_to_str.py a = u"中文字符"; a.encode("GBK"); #打印: '\xd6\xd0\xce\xc ...
- 关于编码和解码问题——encode、decode
一.背景和问题 近期在做一个关于声卡录音的项目,开发环境是win10 64位家庭中文版,pycharm2019.1,python3.6(Anaconda3),python模块pyaud ...
- [LeetCode] Encode and Decode Strings 加码解码字符串
Design an algorithm to encode a list of strings to a string. The encoded string is then sent over th ...
随机推荐
- Vue+Element实现网页版个人简历系统
这篇文章介绍一个使用Vue+Element实现的个人简历系统,主要用到的技术有:vue.element.css3.css定位. 作者在window10进行开发,目前只在chrome上进行过测试,没有大 ...
- springboot前后端分离项目redis做验证码及用户信息存储验证长时间不操作失效问题解决
1.错误回显:Error in execution; nested exception is io.lettuce.core.RedisCommandExecutionException: MISCO ...
- 0013 CSS复合选择器:后代、子代、交集、并集、超链接伪类
重点: 复合选择器 后代选择器 并集选择器 标签显示模式 CSS背景 背景位置 CSS三大特性 优先级 1. CSS复合选择器 目标 理解 理解css复合选择器分别的应用场景 应用 使用后代选择器给元 ...
- loongson编译所遇问题
环境:虚拟机VMware +Ubuntu18.04+gcc4.9.3 使用gcc4.9.3编译时出错,提示需要运行命令:make -C /work/loongson0103/vUDK2018-loon ...
- idea编辑器的使用
编辑器下载和安装就不说了,网上每次版本都更换得好快 ,发新版的人很多idea2019:https://pan.baidu.com/s/1zc1wkQLLVxbXSjy4ISN4aQ 提取码:cgah, ...
- table 组件
table 组件了解一下? https://juejin.im/post/5da925bdf265da5b5d205b3f?utm_source=gold_browser_extension
- POJ1144 Network 题解 点双连通分量(求割点数量)
题目链接:http://poj.org/problem?id=1144 题目大意:给以一个无向图,求割点数量. 这道题目的输入和我们一般见到的不太一样. 它首先输入 \(N\)(\(\lt 100\) ...
- Java对象头与锁
对象由多部分构成的,对象头,属性字段.补齐区域等.所谓补齐区域是指如果对象总大小不是4字节的整数倍,会填充上一段内存地址使之成为整数倍. 后面两个很好理解,今天我主要想总结一下对象头: 对象头这部分在 ...
- PHP-FPM 远程代码执行漏洞(CVE-2019-11043)的简单复现学习
1.概述 漏洞主要由于 PHP-FPM 中 sapi/ fpm/ fpm/ fpm_main.c 文件内的 env_path_info 下溢导致,攻击者可以使用换行符 %0a 破坏 Nginx 中 f ...
- redis简单操作
一.redis 基础操作 1.1.string 类型及操作 string 是最简单的类型,一个key对应一个value,string类型是二进制安全的.redis的string可以包含任何数据. 1. ...