python说明编码和解解码,python 字符串解码

本文目录一览:

python str与bytes编码解码

下面一张图搞懂编码、解码、编码表之间的关系。

不难看出,它们是一种根据编码表进行翻译、映射的过程:

实际上,字符串类型只有encode()方法,没有decode()方法,而bytes类型只有decode()方法而没有encode()方法。

二进制格式的数据也常称为裸数据(raw data),所以str数据经过编码后得到raw data,raw data解码后得到的str。

上面说了,编码是将字符数据转换成字节数据(raw data),解码是将字节数据转换成字符数据。在Python中字符数据也就是字符串,即str类型,字节数据也就是bytes类型或bytearray类型。

编码时,可以使用字节类型的构造方法bytes()、bytearray()来构造字节,也可以使用str类型的encode()方法来转换。

解码时,可以使用str类型的构造方法str()来构造字符串,也可以使用bytes、bytearray()类型的decode()方法。

另外需要注意的是,编码和解码的过程中都需要指定编码表(字符集),默认采用的是utf-8字符集。

例如,使用encode()的方式将str编码为bytes数据。

使用bytes()和bytearray()将str构造成bytes或bytearray数据,这两个方法都要求str-byte的过程中给定编码。

实际上,bytes()、bytearray()这两个方法构造字节数据的时候还有点复杂,因为可以从多个数据源来构造,比如字符串、整数值、buffer。如何使用这两个方法构造字节数据,详细内容参考help(bytes)和help(bytearray)给出的说明,这里给几个简单示例。

构造bytes的方式:

构造bytearray的方式:

解码是字节序列到str类型的转换。

例如,使用decode()方法进行解码”我”字,它的utf-8的编码对应为”\xe6\x88\x91″:

使用str()进行转换。

当编码、解码的过程使用了不同的(不兼容的)编码表时,就会出现乱码。所以,解决乱码的唯一方式是指定对应的编码表进行编码、解码。

例如,使用utf-8编码”我”字,得到一个bytes序列,然后使用gbk解码这个bytes序列。

这里报错了,因为utf-8的字节序列里有gbk无法解码的字节。如果使用文本编辑器一样的工具去显化这个过程,得到的将是乱码字符。

原文地址:

ASN.1语法以及在python中如何编码解码

ASN.1的文章本来是免费的,但是有的人一定要搞小动作,咱惹不起就只能躲着了,做了一些修改后,改为付费文章

应用程序在网络协议的应用层对payload数据,多使用ASN.1标准进行处理

ASN.1

ASN.1

Abstract Syntax Notation One,抽象语法标记,ASN.1是描述数据格式的标准方法, 它不管语言是如何执行、这些数据具体指什么、用什么类型的编码规则 ,是一种抽象的语法

ASN.1由两部分组成:

一部分描述信息内数据,数据类型及序列格式

另一部分描述如何将各部分组成消息

语法

例如

Report ::= SEQUENCE {

author OCTET STRING,

title OCTET STRING,

body OCTET STRING,

biblio Bibliography

Report是结构体名称

SEQUENCE表示消息是由许多数据单元构成的

中括号{}里面是各种类型的数据单元

前三个数据单元author/title/body的类型是OCTET STRING

最后一个数据单元biblio的类型是另一个ASN.1结构体

Bibliography ::= SEQUENCE {

author OCTET STRING

title OCTET STRING

publisher OCTET STRING

year OCTET STRING

数据类型

类型含义

NULL空

BOOLEAN布尔类型

INTEGER整型

REAL实数类型

BIT STRING比特串

OCTEC STRING字节串

OBJECT IDENTIFIER实体标识符

ENUMERATED枚举类型

SEQUENCE序列

SEQUENCE OF类型的序列

SET集合

SET OF类型的集合

CHOICECHOICE类型

…STRING(有很多就不一一列举)字符串类型

UTCTime时间类型

GeneralizedTime时间类型

ASN.1文件结构

例如

Foo DEFINITIONS ::= BEGIN

    Question ::= SEQUENCE {

        id        INTEGER,

        question  IA5String

    }

    Answer ::= SEQUENCE {

        id        INTEGER,

        answer    BOOLEAN

    }

END 

解析上面的ASN.1文件的结构

ASN.1支持的编码规则

基本编码规则(BER)

规范编码规则(CER)

识别名编码规则(DER)

压缩编码规则(PER)

XML编码规则(XER)

python如何对ASN.1结构的信息编码和解码

如果我们想用python对信息进行编码,需要明确几点:

提供的ASN.1格式的数据

更多内容,请参考公-中-号, 汽车网络诊断通信

python编程(三级)1、编码、数制

在计算机中使用的是二进制,(为什么呢,因为二进制计算简单,可以用电路表示等等很多优点)。但是二进制对阅读和使用是不友好的,因此需要将二进制转换为人类使用的语言,英语,中文等,这就是编码。

最初的编码就是ASCII编码,美国信息交换码。它使用一个字节,8位二进制,可以表示128个符号。常用的1-9,26个字母以及一些英语符号等。

ascii表是不能表示中文的,因此中文也有专门的编码,诸如GB2312,GBK等。其它国家也有类似编码,因此为了方便信息的交流,也就有了统一编码,Unicode,又叫万国码。unicode用0-65535来表示所有字符,Unicode用2-4个字节存储。不同的存储方式,又不同的编码,这就是UTF-8,UTF-16,UTF-32。utf-8根据字符数字的大小,来决定存储字节,存储英文字符时用1个字节,存储汉字时用2个字节。utf-16,两个字节,utf-32,四个字节。

python3 在内存中使用的是Unicode,万国码,默认的编码是utf-8。

chr() ,转换为对应Unicode表字符

ord(),转换为对于Unicode表数字

encode(),编码,将str转换为字节流

decode(),解码,将字节流转换为str

计算机存储数据的格式是二进制,日常和数学中使用的数字是十进制,为了表达简化,因此有了十六进制、八进制。

二进制—-十进制—-八进制—》十六进制

10000001  —》129  —》201—》81

从上式可以看出来,进制越大,表达更大数时更简化。

二进制转十进制  ,按权展开相加

十进制转二进制,除基取余

二进制转八进制 ,从右往左,取3位转换为十进制得到即为8进制,不足3位左边补0。

八进制转二进制,每位展开得到3个二进制位

二进制转十六进制,,从右往左,取4位转换为十进制得到即为16进制,不足3位左边补0。

十六进制转二进制,每位展开得到四个二进制位

int() ,

hex(),转换为16进制

bin(),转换为二进制

oct(),转换为八进制

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/151240.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝的头像小蓝
上一篇 2024-11-11 13:40
下一篇 2024-11-11 13:40

相关推荐

  • 如何查看Anaconda中Python路径

    对Anaconda中Python路径即conda环境的查看进行详细的阐述。 一、使用命令行查看 1、在Windows系统中,可以使用命令提示符(cmd)或者Anaconda Pro…

    编程 2025-04-29
  • Python列表中负数的个数

    Python列表是一个有序的集合,可以存储多个不同类型的元素。而负数是指小于0的整数。在Python列表中,我们想要找到负数的个数,可以通过以下几个方面进行实现。 一、使用循环遍历…

    编程 2025-04-29
  • Python中引入上一级目录中函数

    Python中经常需要调用其他文件夹中的模块或函数,其中一个常见的操作是引入上一级目录中的函数。在此,我们将从多个角度详细解释如何在Python中引入上一级目录的函数。 一、加入环…

    编程 2025-04-29
  • Python周杰伦代码用法介绍

    本文将从多个方面对Python周杰伦代码进行详细的阐述。 一、代码介绍 from urllib.request import urlopen from bs4 import Bea…

    编程 2025-04-29
  • Python计算阳历日期对应周几

    本文介绍如何通过Python计算任意阳历日期对应周几。 一、获取日期 获取日期可以通过Python内置的模块datetime实现,示例代码如下: from datetime imp…

    编程 2025-04-29
  • Python字典去重复工具

    使用Python语言编写字典去重复工具,可帮助用户快速去重复。 一、字典去重复工具的需求 在使用Python编写程序时,我们经常需要处理数据文件,其中包含了大量的重复数据。为了方便…

    编程 2025-04-29
  • Python清华镜像下载

    Python清华镜像是一个高质量的Python开发资源镜像站,提供了Python及其相关的开发工具、框架和文档的下载服务。本文将从以下几个方面对Python清华镜像下载进行详细的阐…

    编程 2025-04-29
  • 蝴蝶优化算法Python版

    蝴蝶优化算法是一种基于仿生学的优化算法,模仿自然界中的蝴蝶进行搜索。它可以应用于多个领域的优化问题,包括数学优化、工程问题、机器学习等。本文将从多个方面对蝴蝶优化算法Python版…

    编程 2025-04-29
  • Python程序需要编译才能执行

    Python 被广泛应用于数据分析、人工智能、科学计算等领域,它的灵活性和简单易学的性质使得越来越多的人喜欢使用 Python 进行编程。然而,在 Python 中程序执行的方式不…

    编程 2025-04-29
  • python强行终止程序快捷键

    本文将从多个方面对python强行终止程序快捷键进行详细阐述,并提供相应代码示例。 一、Ctrl+C快捷键 Ctrl+C快捷键是在终端中经常用来强行终止运行的程序。当你在终端中运行…

    编程 2025-04-29

发表回复

登录后才能评论