pythonstr与bytes编码解码

author author     2023-05-04     335

关键词:

参考技术A 下面一张图搞懂编码、解码、编码表之间的关系。

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

实际上,字符串类型只有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无法解码的字节。如果使用文本编辑器一样的工具去显化这个过程,得到的将是乱码字符。

原文地址: https://www.cnblogs.com/f-ck-need-u/p/10185965.html

编码与解码(代码片段)

str与bytes的相互转化中文#str--->byteencode编码#s=‘二哥‘#b=s.encode(‘utf-8‘)#print(b)##byte--->strdecode解码#s1=b.decode(‘utf-8‘)#print(s1)英文#s=‘abf‘#b=s.encode(‘utf-8‘)#print(b)##byte--->strdecode解码#s1=b.d 查看详情

java中编码与解码分别指啥?

java中编码:URLEncoder.encode(strUri,"utf-8");java中解码码:URLDecoder.decode(strUri,"utf-8");java编码和解码     流读取文件,具有转换编码功能的有:OutputStreamWriter和InputStreamReader,构造器有如:InputStreamReader(... 查看详情

java里关于string的编码与解码

...publicbyte[]getBytes(StringcharsetName)使用指定的字符集将此String编码为byte序列,结果存在一个byte数组中publicString(byte[]bytes,StringcharsetName)通过使用指定的charset解码指定的byte数组,构造一个新的String。在网络传输中,信息都是以字节序... 查看详情

编码和解码(字符串与byte[]之间的转换)

...rchive/2012/02/27/2370446.html 非常蛋疼的事情,google和baidu在编码是分别采用了UTF-8和GB2312基础知识UTF-8中,一个汉字对应三个字节,GB2312中一个汉字占用两个字节。 不论何种编码,字母数字都不编码,特殊符号编码后占用一个... 查看详情

java里关于string的编码与解码

String的getBytes(charset)方法是解码还是编码啊?我在网上获取了一串包含中文的字符串直接在eclipse上打印是乱码,经过转换byte[]b2=s.getBytes("gbk"); Stringss=newString(b2,"utf-8");然后再打印就没问题了。api上说getBytes的工... 查看详情

编码与解码(代码片段)

...节)  1024byte=1Mb  1024Mb=1G  ascll最早的编码8位一个字节(字符和符号,无中文)GBK国标码    16位4个字节(字符和中文和符号)nuicode万国码32位8个字节(字符和中文和符号)UTF-8可变长度unicode&nbs 查看详情

java字符编码与解码

1、字符编码的发展历程  ①、ASCII码  因为计算机只认识数字,所以我们在计算机里面的一切数据都是以数字来表示,因为英文字符有限,所以规定使用的字节的最高位是0,每一个字节都是以0-127之间的数字来表示。比如A... 查看详情

编码解码

...字符流:会将unicode的byte[](包括数值和字符),转换成默认编码(utf-8)的byte[],然后存入到文件。字符--》字节byte[]--》字符二、java.class类的编码为:unicode;Java的class文件采用utf8的 查看详情

编码与解码(代码片段)

1.字符编码ascii码(不能直接写字符,汉字从而引入了GBK码)GB2312收录了7445个汉字及字符;GBK1.0收录了21886个汉字及字符;GB18030收录了27484个汉字及字符;unicode国际标准但都需要俩个字节;utf-8是优化的国际化的统一标准,(是可变... 查看详情

url中传递中文参数时的转码与解码

...方式有很大的弊端,因为它是使用指定的字符集将此String编码为byte 序列,并将结果存储到一个新的byte 数组中,然后通过使用指定的字符编码将生成的byte 数组解码,构造一个新的String字 查看详情

java中编码解码问题

...;byte[]bytes=Str.getBytes("ISO8859-1");//字符串先用ISO8859-1编码Stringmm=newString(bytes,"ISO8859-1");//字符串再用ISO8859-1解码结果是"??123"疑问:用同一种方式解码为什么会出现乱码呢?(2)问题二:从网页上看到这样的一... 查看详情

python中base64编码与解码

...on3环境:Python3中有一些区别,因为Python3中字符都是unicode编码,而b64encode函数的参数为byte类型,所以必须先转码。以上就是本文的全部内容,如果觉得有用的话欢迎点赞和转发,多谢。推荐阅读: 查看详情

了解bytesstr与unicode的区别(代码片段)

...s的实例包含原始的8位值;str的实例包含Unicode。 二、编码与解码decode的作用是将其他编码的字符串解码成unicode编码字符串encode的作用是将unicode编码字符串编码成其他编码的字符串把Unico 查看详情

ie前端怎么解码base64是bytes类型

参考技术AIE10。前端实现base64编码和解码,ie前端使用从IE10+浏览器可解码base64是bytes类型。所有浏览器就原生提供了Base64编码,解码方法,不仅可以用于浏览器环境,ServiceWorker环境也可以使用。 查看详情

java核心类库-io-字符解码和编码操作

编码:把字符串转换为byte数组。解码:把byte数组转换为字符串。一定要保证编码和解码的字符集相同,否则乱码。  查看详情

文件处理(代码片段)

...读,写入,读写,追加等模式;默认为只读模式。encoding:编码与解码的方式编码:‘字符串‘---------encode---------》bytes解码:bytes---------decode---------》‘字符串 查看详情

bytes.decode()方法(代码片段)

bytes.decode()方法描述decode()方法以指定的编码格式解码bytes对象。默认编码为‘utf-8‘。语法decode()方法语法:bytes.decode(encoding="utf-8",errors="strict")参数encoding--要使用的编码,如"UTF-8"。errors--设置不同错误的处理方案。默认为‘strict... 查看详情

python进阶—字符串编码(encode)与解码(decode)(代码片段)

目录文章目录目录基本概念Python的字符串Python的编码(encode)与解码(decode)基本概念bit(比特):计算机中最小的数据单位。byte(字节):计算机存储数据的单元。char(字符)... 查看详情