大话 Python:python 基础巩固 -- python 有多少种编码方式,如何检测编码方式并完成转码

字节先锋号说
• 阅读 1419

1、ASCII 编码

计算机最开始是由美国人发明使用的,当然 ASCII 编码也是由美国人发明的。所以它的产生主要是切合了美国的 English 语言,并且支持阿拉伯数字以及英文状态的标点符号。

2、GB2312 编码

由于 ASCII 编码只能支持英文的编码使用,我们的中文不能实现计算机信息交流,所以产生了 GB2312 编码用来完成信息交流,它是中华人民共和国国家标准简体中文字符集。

3、Unicode 编码

各个国家地区在定义了自己的编码规范之后,那么在多种编码语言的系统中就会出现乱码的情况。韩国有韩国的编码、日本有日本的编码,这样就造成了多语言模式的混乱。因此,Unicode 编码就是为了解决这种情况,将所有的编码都统一到一个编码规范里面,即使是系统中出现多语言的处理也不会产生乱码的情况。

4、UTF-8 编码

正所谓先完成再完善,技术的发展更是如此。虽然使用 Unicode 编码解决了编码统一性的问题,但是它又会占用比较多的空间、并且在传输的过程中也会消耗相应的性能。所以, UTF-8 就随着历史的潮流诞生了,它可以使用更小的字节数完成语言编码的转换,大大的节省了空间和传输性能。

5、检测编码

检测编码是经常要在爬虫过程中使用的方式,对网络上抓取到的内容进行编码的检测判断,为后续的内容提取、数据清洗等提供可靠的依据。

1# 导入 chardet 库
2import chardet
3test_str = "Python 集中营"
4# 使用 detect() 检测编码
5print chardet.detect(test_str)

为了避免大文本的转换太过耗费时间,chardet 库还提供了另外一种检测方式,使用对象 UniversalDetector 的逐行检测方式会大大的提高效率。

 1# 导入 UniversalDetector 对象
 2from chardet.universaldetector import UniversalDetector
 3
 4# 定义获取编码函数
 5def getEncodeInfo(file):
 6    # 打开一个文件
 7    with open(file, 'rb') as f:
 8    # universaldetector 对象赋值
 9    detector = UniversalDetector()
10    for line in f.readlines():
11        # 遍历检测编码
12        detector.feed(line)
13        # 确保检测达到最小置信阈值为 True 时返回
14        if detector.done:
15            break
16    # 检测完之后关闭源文本
17    detector.close()
18    # 返回编码
19    return detector.result['encoding']

6、编码转换

一般在创建 .py 的 python 文件时,如果没有在文件头执行编码格式,则默认情况下是 ASCII 编码,这个时候我们可以采用重新加载编码格式的方式进行处理。

 1# 导入 sys 库
 2import sys
 3# 重新加载 sys 系统库
 4reload(sys)
 5# 打印默认编码格式
 6print sys.getdefaultencoding() 
 7# 重新设置编码格式 UTF-8
 8sys.setdefaultencoding('utf-8')
 9# 打印重新设置的编码格式
10print sys.getdefaultencoding() 

如果是进行文本的编码格式转换时,一般的思路是先将现有文本进行解码、完成解码之后再重新编码。

1# 读取或定义文本
2content = "文本内容"
3# 文本解码 encode_info 为检测到的编码方式
4content_decode = content.decode(encode_info,'ignore')
5# 文本重新编码
6content_encode_utf8 = content_decode.encode('utf-8')

更多精彩前往微信公众号【Python 集中营】,专注后端编程实战,原创文章每天更新!

大话 Python:python 基础巩固 -- python 有多少种编码方式,如何检测编码方式并完成转码

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
3年前
CentOS7设置中文字符集
一、字符编码和字符集1、字符编码(characterencoding):字符编码是一种法则,在数字与符号之间建立的对应关系。不同的国家有不同的语言,包含的文字、标点符号、图形符号各有不同。例如在ASCII编码中,用数字97表达字符'a'与字符集相对应,常见的字符编码有AS
Wesley13 Wesley13
3年前
4项技巧使你不再为PHP中文编码苦恼
PHP程序设计中中文编码问题曾经困扰很多人,导致这个问题的原因其实很简单,每个国家(或区域)都规定了计算机信息交换用的字符编码集,如美国的扩展ASCII码,中国的GB231280,日本的JIS等。作为该国家/区域内信息处理的基础,字符编码集起着统一编码的重要作用。字符编码集按长度分为SBCS(单字节字符集),DBCS(双字节字符集)两大类。早期
Stella981 Stella981
3年前
JS汉字编码 (ascii,unicode)的转换与反转
ASCII就是编码英文的26个字母和一些常见的符号,之后扩展了一半。总之是一个字节来做编码,大于128的部分是一些特殊符号。但ASCII是无法编码别的东西的,比如说是不存在“中文的ascii码需要2个字符”这种说法的。ASCII就只有一个字节。Unicode是足够编码地球上所有的语言了,所以ASCII中所能表示的,Unicode当然全部包
Stella981 Stella981
3年前
PHP检测当前字符编码并转码
一、检测当前字符串编码并将编码改为utf81获取当前字符串的编码$encodemb\_detect\_encoding($str,array("ASCII",'UTF8',"GB2312","GBK",'BIG5')); 2将字符编码改为utf8$str\_encodemb\_convert\_encoding($st
Stella981 Stella981
3年前
Python字符编码详解
本文详细讲解字符编码的相关知识,包括字符编码的发展历程,字符编码的使用,在python中字符编码的应用首先要明确:计算机中的所有数据,不论是文字、图片、视频、还是音频文件,本质上最终都是按照类似01010101的二进制存储的拓展1:什么是编码,解码?1.信息的两种状态:1)明文状态:类似显示器上能看到的
Stella981 Stella981
3年前
Python2.x的编码问题
1\.计算机编码历史ASCIIPython的默认编码,其是一种单字节的编码。刚开始计算机世界里只有英文,而单字节可以表示256个不同的字符。最开始ASCII只定义了128个字符编码,包括96个文字和32个控制符号,因此ASCII只使用了一个字节的后7位,最高位都为0。每个字符和ASCII码的对应关系可以查看下图:!image_1
Wesley13 Wesley13
3年前
URL编码以及get和post请求乱码问题
1. 什么是URL编码。URL编码是一种浏览器用来打包表单输入的格式,浏览器从表单中获取所有的name和其对应的value,将他们以name/value编码方式作为URL的一部分或者分离的发送到服务器上。2. URL编码规则。每对name/value由&分开,每对来自表单的name/value用分开。如果用户没有输入值的那个
Wesley13 Wesley13
3年前
utf8编码
utf8编码关于编码问题:首先需要知道什么是编码为什么要编码,计算机只能存储一个字节一个字节的二进制信息,所以需要把人可读的这些文字用唯一的方式在计算机内部表示出来,但是表示的方法不唯一;例如英文字符就那么点所以一个字节也就是8个二进制位就能给所有的进行编码,最多能给256个符号编码;但是ASCII编码实际只使用了
字节先锋号说
字节先锋号说
Lv1
爱世间温暖事物,沿途为晚霞驻足。
文章
4
粉丝
0
获赞
0