当前位置: 首页 > news >正文

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

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() 方法对原字符进行编码,不会直接修改原字符串,如果想修改原字符串,需要重新复制。

示例一:

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

结果:

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

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

str = "百度官网"
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。

示例二:

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流群:711312441
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
str = "百度官网"
bytes = str.encode()
print(bytes.decode())

输出:

百度官网

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

str = "百度官网"
bytes = str.encode('GBK')
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

相关文章:

  • Python深拷贝(deepcopy)、浅拷贝(copy)、等号拷贝的深入理解----看了还不懂找我
  • 【论文研读】-Defining the Ethereum Virtual Machine for Interactive Theorem Provers
  • HIVE 3 使用 MR 引擎多表关联 (JOIN) 导致丢数的问题复现、问题根源及解决方案 (附代码)
  • 计算机毕业设计Java网上求职招聘系统(源码+系统+mysql数据库+Lw文档)
  • C#构造函数
  • 【Node.js+koa--后端管理系统】用户注册接口设计 | 连接Mysql数据库 | 校验注册权限
  • 30岁年薪28W,我还是没顶住压力跳槽了····
  • boost之string_ref
  • Java实现拼图小游戏(1)—— JFrame的认识及界面搭建
  • Java成品网站推荐 毕设从这起步就够了
  • P4 开发实践 — NG-SDN Tutorial — Exercise 5: IPv6 Routing
  • Android Studio Dolphin | 2021.3.1 发布,快来看看有什么更新吧~
  • 常见软件---SQLite3的C语言下使用
  • 嵌入式C语言(入门必看)
  • 神经网络解决优化问题,神经网络 样本不平衡
  • Android交互
  • Docker容器管理
  • ECS应用管理最佳实践
  • es6要点
  • go语言学习初探(一)
  • Javascript Math对象和Date对象常用方法详解
  • Linux后台研发超实用命令总结
  • Next.js之基础概念(二)
  • Shadow DOM 内部构造及如何构建独立组件
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 我是如何设计 Upload 上传组件的
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 小试R空间处理新库sf
  • 智能合约Solidity教程-事件和日志(一)
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • ​MySQL主从复制一致性检测
  • ​ssh免密码登录设置及问题总结
  • #etcd#安装时出错
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (二)linux使用docker容器运行mysql
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (三)c52学习之旅-点亮LED灯
  • (实战篇)如何缓存数据
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (转)树状数组
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .Net Core和.Net Standard直观理解
  • .NetCore项目nginx发布
  • .net下简单快捷的数值高低位切换
  • .NET中使用Redis (二)
  • :中兴通讯为何成功
  • @data注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • [ 2222 ]http://e.eqxiu.com/s/wJMf15Ku
  • [Angularjs]asp.net mvc+angularjs+web api单页应用