Python 编码encode()、 解码decode()问题
乱码这种东西,时不时出现。本来开开心心想着我要学习啦,然后兴高采烈打开了比火星文还火星文的字符……

没事,我可以搞定这堆鬼画符。

先来讲一下为什么有乱码这种东西的存在
故事是这样滴:
字符串是Python的一种数据类型,它的处理会涉及到编码问题。
我们可爱的计算机只能识别计算机语言,它以二进制字节形式来存储数据,就是0和1构成的一个长长的二进制字节(一般人是识别不了这种这么原始的语言的)
而作为人类,我们说的是人话,'language'、'中文'、'123'……,用的是文本字符(计算机读不懂这种抽象语言)
So, 人类创造出了ASCII码,一种字符对照表(类似翻译官),让人类跟计算机能交流啦!
最早的对照表是ASCII码表,ASCII码表是美国人创造出来的,总共128个字符,满足美国人民的日常需求!
但是!!!
世界那么大,每个国家都有自己的文字、符号,人类一直在扩充这张对照表,陆续创造了:扩展ASCII码、GB2312、GBK……
啊哈哈,各个国家有各个国家的特色。于是,生产出了许许多多的对照表。
工作中经常会遇到不同编码的问题,需要我们对不同的编码进行转换……但是随着人们的扩充,选到合适的对照表越来越费时间、精力,你们谁才是我要的那张表?

你可知道,时间是宝贵的,更何况是程序员的时间。
终于,美国一个叫ISO的组织看不下去了,它决定整顿一下这个混乱的编码世界
于是,Unicode就诞生啦,它将全世界人民的符号全部编进去了。让你们全部有个规范走,别再搞事情啦!(快去这个神器的网站看看:https://unicode-table.com/en/)
在Python里,如果你们要转换编码,都要经过Unicode。
不论是UTF-8或者是GBK,整个过程都是先通过编码decode转换为Unicode告诉Unicode当前的编码格式是什么、然后再通过解码encode转换为自己想要实现的编码格式或类型。
假设一个只会中文和一个只会英文的外交官在交流,Unicode就扮演其中的翻译官,他将中文字符转换成Unicode字节,再将Unicode字节转换成英文字符。
Python3中,str类型存unicode数据,bytse类型存bytes数据。
And, 文件默认的编码方式就是utf-8。
下面给个图来加深一下记忆:

下面到举栗子时间:

a = '我爱排球,有人要打球吗?'
print(type(a))
<class 'str'>
a.encode()
b'\xe6\x88\x91\xe7\x88\xb1\xe6\x8e\x92\xe7\x90\x83\xef\xbc\x8c\xe6\x9c\x89\xe4\xba\xba\xe8\xa6\x81\xe6\x89\x93\xe7\x90\x83\xe5\x90\x97\xef\xbc\x9f'
上面的是用默认的UTF-8去encode变量a,下面试一下encode为GBK类型
a.encode('GBK')
b'\xce\xd2\xb0\xae\xc5\xc5\xc7\xf2\xa3\xac\xd3\xd0\xc8\xcb\xd2\xaa\xb4\xf2\xc7\xf2\xc2\xf0\xa3\xbf'
上面展示了编码过程,接下来展示解码操作,解码经常出错,所以要留心哦

b = '下午四点全队集合,东区气排场'
print(type(b))
b1 = b.encode()
b2 = b.encode('GBK')
<class 'str'>
print(type(b1))
print(type(b2))
<class 'bytes'>
<class 'bytes'>
先把b以两种编码形式编好,一个是b1(UTF-8编码的),另一个是b2(GBK编码的)
用谁编码的,就只能用谁去解码,不然会报错
下面,我们不这么干,先来个乱码情况:

b1是UTF-8编码的,但是我们用GBK去解码
b1.decode('GBK')
'涓嬪崍鍥涚偣鍏ㄩ槦闆嗗悎锛屼笢鍖烘皵鎺掑満'
啊哈哈,你看出上面输出的是什么吗,反正我看不出

这就是常见的乱码情况。
下面是时候正常解码一下啦!
b1.decode('UTF-8')
'下午四点全队集合,东区气排场'
So,乱码就是这么一回事,他只是缺少一个对的翻译官。你要做的就是帮他找一个正确的翻译官。兄弟,加油,你是个称职的媒婆,你可以的

好了,我要去找吃的了。吃,吃,吃 ,我要胖十斤

Python 编码encode()、 解码decode()问题的更多相关文章
- python 编码与解码 decode解码 encode 编码
>>> '无' #gbk字符'\xce\xde'>>> str1 = '\xce\xde'>>> str1.decode('gbk') # ...
- python编码encode和decode
计算机里面,编码方法有很多种,英文的一般用ascii,而中文有unicode,utf-8,gbk,utf-16等等. unicode是 utf-8,gbk,utf-16这些的父编码,这些子编码都能转换 ...
- python2和python3的编码encode解码decode函数
python比较坑的一个点:意义完全变了的两个函数 首先 常用的编码方式有3种,utf-8: 常用的传输和存储格式,Unicode的一种简化 Unicode:包括了所有可能字符的国际统一编码 GBK ...
- Python—编码与解码(encode()和decode())
编码与解码 decode英文意思是解码,encode英文原意是编码. Python 里面的编码和解码也就是 unicode 和 str 这两种形式的相互转化.编码是 unicode -> str ...
- 关于base64编码Encode和Decode编码的几种方式
关于base64编码Encode和Decode编码的几种方式 Base64是一种能将任意Binary资料用64种字元组合成字串的方法,而这个Binary资料和字串资料彼此之间是可以互相转换的,十分方便 ...
- Python编码(encode)和解码(Decode)常见的两个错误
项目地址:https://git.io/pytips 0x07 和 0x08 分别介绍了 Python 中的字符串类型(str)和字节类型(byte),以及 Python 编码中最常见也是最顽固的两个 ...
- python编码encode decode(解惑)
关于python 字符串编码一直没有搞清楚,今天总结了一下. Python 字符串类型 Python有两种字符串类型:str 与 unicode. 字符串实例 # -*- coding: utf-8 ...
- 关于Python字符编码encode和decode
(注:本文部分内容摘自互联网,由于作者水平有限,不足之处,还望留言指正.) 记得几天前,部门的一个小姑娘问我,怎么她Python打印出来的中文信息都乱码了?我走过去,略思一二,瞬间给她搞定,其实这是字 ...
- Python编码与解码
# -*- coding: utf-8 -*- # 直接保存为Python脚本,对照执行结果会好看点. # 实验的内容都是在Python 2.7.x下进行的. # Python3默认采用unicode ...
- Python 关于 encode与decode 中文乱码问题
字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(en ...
随机推荐
- ORA-12514错误分析
ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务 的解决方法 ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务 有同事遇到这个问题,现总结一下,原因如下: ...
- REDIS scan与sunionstore合并多集合数据
实际业务场景: 现需求要将多个KEY的set集合数据合并到一个总集合中,思路:通过scan分批扫描满足条件的KEY,然后用sunionstore分批合并. 注意闭坑:此种解决方案只适用于待合并的集合K ...
- 《Mysql - 索引(唯一索引和普通索引的选择)Change Buffer 》
一:概述 - 如果业务代码已经保证了不会写入重复的身份证号. - 从性能的角度考虑,你会为这个身份证号,选择唯一索引还是普通索引呢?选择的依据是什么呢? - 这就要从他们的执行过程看起. 二:唯一索引 ...
- 《统计学习方法》极简笔记P4:朴素贝叶斯公式推导
<统计学习方法>极简笔记P4:朴素贝叶斯公式推导 朴素贝叶斯基本方法 通过训练数据集 T={(x_1,y_1),(x_2,y_2),(x_N,y_N)...,(x_1,y_1)} 学习联合 ...
- 100天搞定机器学习|Day3多元线性回归
前情回顾 [第二天100天搞定机器学习|Day2简单线性回归分析][1],我们学习了简单线性回归分析,这个模型非常简单,很容易理解.实现方式是sklearn中的LinearRegression,我们也 ...
- 关联安装 mysql ,zabbix , nginx, php
/usr/local/zabbix-3.2.6 /usr/local/php-5.6.3 /usr/local/mysql-5.7.26 安装mysql mv /etc/yum.repos.d/Cen ...
- Oracle查询部门工资最高员工的两种方法 1、MAX()函数 2、RANK()函数
本文以SCOTT用户下初始的EMP表为参考.代码可直接使用. 查询EMP表结构的语句如下,[代码1]: DESC EMP; EMP表结构如下:[结果1]: SQL> DESC EMP ...
- Scratch教程:谁是真悟空
在西游记中,有一集是“真假悟空”,六耳猕猴变成了悟空的模样与真悟空真假难辨,打的不可开交. 在Scartch中,我们常常会使用一个本体来生成多个克隆体,这在开发过程中有重要的意义.但在实际操作中,每个 ...
- Intellij IDEA中启动多个微服务--开启Run Dashboard管理
1.找到workspace.xml 2.添加配置 <option name="configurationTypes"> <set> <option v ...
- POSIX异步I/O接口使用
POSIX1003.1b 实时扩展协议规定的标准异步 I/O 接口,即 aio_read 函数. aio_write 函数.aio_fsync 函数.aio_cancel 函数.aio_error 函 ...