0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Python字符与字节

麦辣鸡腿堡 来源:Python都知道 作者:了不起 2023-07-05 15:55 次阅读

一个字符不等价于一个字节,字符是人类能够识别的符号,而这些符号要保存到计算的存储中就需要用计算机能够识别的字节来表示。一个字符往往有多种表示方法,不同的表示方法会使用不同的字节数。这里所说的不同的表示方法就是指字符编码,比如字母A-Z都可以用ASCII码表示(占用一个字节),也可以用UNICODE表示(占两个字节),还可以用UTF-8表示(占用一个字节)。字符编码的作用就是将人类可识别的字符转换为机器可识别的字节码,以及反向过程。

UNICDOE才是真正的字符串,而用ASCII、UTF-8、GBK等字符编码表示的是字节串。关于这点,我们可以在Python的官方文档中经常可以看到这样的描述"Unicode string" , " translating a Unicode string into a sequence of bytes"

我们写代码是写在文件中的,而字符是以字节形式保存在文件中的,因此当我们在文件中定义个字符串时被当做字节串也是可以理解的。但是,我们需要的是字符串,而不是字节串。一个优秀的编程语言,应该严格区分两者的关系并提供巧妙的完美的支持。JAVA语言就很好,以至于了解Python和PHP之前我从来没有考虑过这些不应该由程序员来处理的问题。遗憾的是,很多编程语言试图混淆“字符串”和“字节串”,他们把字节串当做字符串来使用,PHP和Python2都属于这种编程语言。最能说明这个问题的操作就是取一个包含中文字符的字符串的长度:

  • 对字符串取长度,结果应该是所有字符串的个数,无论中文还是英文
  • 对字符串对应的字节串取长度,就跟编码(encode)过程使用的字符编码有关了(比如:UTF-8编码,一个中文字符需要用3个字节来表示;GBK编码,一个中文字符需要2个字节来表示)

注意:Windows的cmd终端字符编码默认为GBK,因此在cmd输入的中文字符需要用两个字节表示

>>> # Python2

>>> a = 'Hello,中国' # 字节串,长度为字节个数 = len('Hello,')+len('中国') = 6+2*2 = 10

>>> b = u'Hello,中国' # 字符串,长度为字符个数 = len('Hello,')+len('中国') = 6+2 = 8

>>> c = unicode(a, 'gbk') # 其实b的定义方式是c定义方式的简写,都是将一个GBK编码的字节串解码(decode)为一个Uniocde字符串

>>>

>>> print(type(a), len(a))

(, 10)

>>> print(type(b), len(b))

(, 8)

>>> print(type(c), len(c))

(, 8)

>>>

Python3中对字符串的支持做了很大的改动。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编码
    +关注

    关注

    6

    文章

    835

    浏览量

    54457
  • 字符
    +关注

    关注

    0

    文章

    229

    浏览量

    24888
  • python
    +关注

    关注

    51

    文章

    4677

    浏览量

    83468
收藏 人收藏

    评论

    相关推荐

    探究python字节

    就是Python的“字节码”文件。(但在Python 3上却难觅其踪 -- 原因是它们不再与.py文件出现在同一个目录中,而是放在一个名为__pycache__的子目录中了)。或许你也已听说过这是一种
    发表于 05-22 15:48

    python字符串拼接方式了解

    python字符串拼接的方式 在Python的实际开发中,很多都需要用到字符串拼接,python字符
    发表于 12-06 10:09 924次阅读

    字符流和字节流有什么那区别

    字符流在Java中,根据处理的数据单位不同,分为字节流和字符流。字符流是由字符组成的,例如 FileReader、FileWriter、Bu
    发表于 12-20 17:46 7880次阅读
    <b class='flag-5'>字符</b>流和<b class='flag-5'>字节</b>流有什么那区别

    Python转义字符使用总结资料免费下载

    本文档的主要内容详细介绍的是Python转义字符使用总结资料免费下载主要内容包括了:Python转义字符Python
    发表于 01-17 17:24 6次下载
    <b class='flag-5'>Python</b>转义<b class='flag-5'>字符</b>使用总结资料免费下载

    什么是复制字符串?Python如何复制字符

    连续几篇文章都在写 Python 字符串,这出乎我的意料了。但是,有的问题,不写不行,特别是那种灵机一动想到的问题,最后你发现,很多人根本不懂却又误以为自己懂了。那就继续刨根问底,探究个明白
    发表于 11-25 10:32 2779次阅读

    Python字符的实例详细说明

    本文档的主要内容详细介绍的是Python字符的实例详细说明包括了:Python 转义字符Python
    发表于 10-14 17:13 7次下载
    <b class='flag-5'>Python</b><b class='flag-5'>字符</b>的实例详细说明

    Python字符数统计函数程序

    Python字符数统计函数程序免费下载。
    发表于 05-25 14:35 18次下载

    2.2 python字符串类型

    2.2 python字符串类型 1. 如何定义字符串? 字符串是Python中最常用的数据类型之一。 使用单引号或双引号来创建
    的头像 发表于 02-17 17:08 1230次阅读

    Python-字符

    字符串就是 一串字符 ,是编程语言中表示文本的数据类型,在Python中使用一对双引号 "" 或者一对单引号来定义.
    的头像 发表于 02-16 15:05 643次阅读
    <b class='flag-5'>Python</b>-<b class='flag-5'>字符</b>串

    python字符串序列操作和不可变性

    初识python字符串序列操作和不可变性。python字符串序列操作为序列通用操作,python字符
    的头像 发表于 02-23 15:01 636次阅读

    python字符串有哪些特定方法

    python字符串序列操作也适用于列表和元组。 python字符串还有独有方法,即字符串对象的函数,其他对象不可调用,只有
    的头像 发表于 02-23 15:02 484次阅读

    Python中检查字符串包含的方法

    Python 有多种处理字符串的方法。今天我们介绍如何检查一个字符串中是否包含另一个字符串。
    的头像 发表于 05-14 16:02 1.4w次阅读

    Python2与Python3中对字符串的支持

    其实Python3中对字符串支持的改进,不仅仅是更改了默认编码,而是重新进行了字符串的实现,而且它已经实现了对UNICODE的内置支持,从这方面来讲Python已经和JAVA一样优秀。
    的头像 发表于 07-05 16:15 528次阅读

    Python字符编码转换

    UNICODE字符串可以与任意字符编码的字节进行相互转换,如图: 那么大家很容易想到一个问题,就是不同的字符编码的字节可以通过Unicode
    的头像 发表于 07-05 16:25 827次阅读
    <b class='flag-5'>Python</b><b class='flag-5'>字符</b>编码转换

    字节流和字符流有什么区别?看完就知道!

    字节流和字符流有什么区别?看完就知道! 字节流和字符流是Java I/O系统中的两个重要概念,用于处理输入和输出的数据。 首先,字节流是以
    的头像 发表于 12-09 14:57 925次阅读