专栏首页python教程-猿说python49.python str/bytes/unicode区别详解

49.python str/bytes/unicode区别详解

一.前言

在讲解 str / bytes /unicode区别之前首先要明白字节和字符的区别,请参考:bytearray/bytes/string区别 中对字节和字符有清晰的讲解,最重要是明白:

字符str是给人看的,例如:文本保存的内容,用来操作的;

字节bytes是给计算机看的,例如:二进制数据,给计算机传输或者保存的;

二.str/bytes/unicode区别

1.在python2.x版本中str/bytes/unicode区别

在python2.x版本中str跟bytes是等价的;值得注意的是:bytes跟unicode是等价的,详情见下图

s1 = u"Hello, World!"
s2 = "Hello, World!"
print(type(s1))
print(type(s2))

输出:

<type 'unicode'>
<type 'str'>

2.在python3.x版本中str/bytes/unicode区别

在python3.x版本中str跟unicode是等价的;值得注意的是:bytes跟unicode是不等价的,详情见下图

s1 = u"Hello, World!"
s2 = "Hello, World!"
print(type(s1))
print(type(s2))

输出:

<class 'str'>
<class 'str'>

三.string与bytes相互转换

1.string经过编码encode转化成bytes

# !usr/bin/env python
# -*- coding:utf-8 _*-
"""
@Author:何以解忧
@Blog(个人博客地址): shuopython.com
@WeChat Official Account(微信公众号):猿说python
@Github:www.github.com
 
@File:python_bytes_string_4.py
@Time:2020/3/4 10:25
 
@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
"""
 
 
s = "shuopython.com"
#将字符串转换为字节对象
b2 = bytes(s,encoding='utf8') #必须制定编码格式
# print(b2)
 
#方法一:字符串encode将获得一个bytes对象
b3 = str.encode(s)
#方法二:字符串encode将获得一个bytes对象
b4 = s.encode()
print(b3)
print(type(b3))
print(b4)
print(type(b4))

输出结果:

b'shuopython.com'
<class 'bytes'>
b'shuopython.com'
<class 'bytes'>

2.bytes经过解码decode转化成string

# 字节对象b2
    # 如果含有中文,必须制定编码格式,否则报错TypeError: string argument without an encoding
    b2 = bytes("猿说python", encoding='utf8')
 
    # 方法二:bytes对象decode将获得一个字符串
    s2 = bytes.decode(b2)
    # 方法二:bytes对象decode将获得一个字符串
    s3 = b2.decode()
    print(s2)
    print(s3)

输出结果:

猿说python
猿说python

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 44.python bytes函数

    python bytes对于刚接触python的小伙伴来讲,可能还是有点陌生!bytes是字节序列,值得注意的是它有取值范围:0 <= bytes <= 255...

    猿说编程[Python和C]
  • 47.python bytearray/bytes/string区别

    在讲解 bytearray / bytes / string 三者的区别之前,有必要来了解一下字节和字符的区别:

    猿说编程[Python和C]
  • 15.python json模块

    JSON 的全称是 JavaScript Object Notation,即 JavaScript 对象符号,它是一种轻量级、跨平台、跨语言的数据交换格式,其设...

    猿说编程[Python和C]
  • synchronized 底层如何实现?什么是锁升级、降级?

    synchronized 代码块是由一对 monitorenter/monitorexit 指令实现的,Monitor 对象是同步的基本实现单元。

    王小明_HIT
  • 软件工程师除了写代码,还能做什么工作?

    本文首发于 InfoQ Pro(infoqpro),InfoQ Pro 是由 InfoQ 推出的全新媒体服务平台。关注我们,第一时间获得 IT 深度内容和会员定...

    深度学习与Python
  • (23) 枚举的本质 / 计算机程序的思维逻辑

    前面系列,我们介绍了Java中表示和操作数据的基本数据类型、类和接口,本节探讨Java中的枚举类型。 所谓枚举,是一种特殊的数据,它的取值是有限的,可以枚举出来...

    swiftma
  • Android在线支付

    今天照着教程做了一遍。毕竟不是高级工程师,有些东西只是停留在照葫芦画瓢。通过这一次和前几天的网络编程,知道了大体的流程。 现在会的大概就这两样: 一。能...

    提莫队长
  • MySQL 查询缓存

    MySQL 拿到一个查询请求后,会先看看之前有没有执行过这条语句,如果执行过,则直接从查询缓存中取之前查询的结果即可,但大多情况不建议使用 MySQL 的查询缓...

    一份执着✘
  • 当creator遇上protobufjs|青春升级记

    pbkiller1.0已经上线Cocos商店,支持了微信小游戏环境,我录制了一段小视频,演示pbkiller的使用流程和方法。

    张晓衡
  • HGE系列之九 管中窥豹(精灵动画)

    这次的HGE之旅,让我们来看看精灵及动画的实现,毕竟对于一款2D游戏引擎来说,恐怕精灵和动画不是最重要的,也可算是最重要之一了吧:)

    用户2615200

扫码关注云+社区

领取腾讯云代金券