ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

encode()和decode()方法:字符串编码转换

2022-08-04 18:31:29  阅读:154  来源: 互联网

标签:字符 编码 bytes decode str encode


Python中,有两种常用的字符串类型,分别为 str 和 bytes 类型,其中 str 用来表示 Unicode 字符,bytes 用来表示二进制数据。str 类型和 bytes 类型之间就需要使用 encode() 和 decode() 方法进行转换。

encode()方法:为字符串类型(str)提供的方法,用于将 str 类型转换成 bytes 类型,这个过程也称为 ”编码“。

encode()方法的语法格式如下:

str.encode([encoding="utf-8"][,errors="strict"])

注意:格式中用 [] 括起来的参数为可选参数,也就是说,在使用此方法时,可以使用 [] 中的参数,也可以不使用。

参数解释:

  str:要进行转换的字符串。

  encoding="utf-8":指定进行编码时采用的字符编码,该选项默认采用 utf-8 编码。例如。想要使用简体中文,可以设置gb2312。当方法中只适用这一个参数时,可以省略前边的 ”encoding=",直接写编码格式,例如:str.encode("UTF-8")。

  errors="strict":指定错误处理方式,其可选择值可以是:

      • strict:遇到非法字符就抛出异常。
      • ignore:忽略非法字符。
      • replace:用“?”替换非法字符。
      • xmlcharrefreplace:使用 xml 的字符引用。

       该参数的默认值为 strict。

注意:使用 encode() 方法对原字符进行编码,不会直接修改原字符串,如果想修改原字符串,需要重新复制。

示例一:

1 # 将str类型字符串 “百度官网” 转成 bytes 类型
2 str = "百度官网"
3 print(str.encode())

结果:

b'\xe7\x99\xbe\xe5\xba\xa6\xe5\xae\x98\xe7\xbd\x91'

此方式默认采用UTF-8编码,也可以手动指定其他编码格式,例如:

1 str = "百度官网"
2 print(str.encode('GBK'))

结果:

b'\xb0\xd9\xb6\xc8\xb9\xd9\xcd\xf8'

decode()方法:将 bytest 类型的二进制数据转换为 str 类型,这个过程称为“解码”。

语法格式:

bytes.decode([encoding="utf-8"][,errors="strict"])

参数解释:

  bytes:要进行转换的二进制数据。

  encoding="utf-8":指定解码时采用的字符编码,默认采用 utf-8 格式。当方法中只使用这一个参数时,可以省略“encoding=”,直接写编码方式即可。注意:对bytes类型数据解码,要选择和当初编码时一样的格式。

  errors="strict":指定错误处理方式,其可选择值可以是:

      • strict:遇到非法字符就抛出异常。
      • ignore:忽略非法字符。
      • replace:用“?”替换非法字符。
      • xmlcharrefreplace:使用 xml 的字符引用。

       该参数的默认值为 strict。

示例二:

1 str = "百度官网"
2 bytes = str.encode()
3 print(bytes.decode())

结果:百度官网

如果解码时采用和编码时不一样的格式,则会抛出异常,例如:

1 str = "百度官网"
2 bytes = str.encode('GBK')
3 print(bytes.decode())

结果:

Traceback (most recent call last):
  File "D:\pythonProject\one day\test.py", line 678, in <module>
    print(bytes.decode())
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb0 in position 0: invalid start byte

 

标签:字符,编码,bytes,decode,str,encode
来源: https://www.cnblogs.com/myx3/p/16551583.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有