7.1 字符串编码格式简介


 前言:

今天在准备数据集的时候,为了将数据集进行格式转换和图片和文件分离专门用Python写了脚本,这个脚本几天前还是正常的,但是几天后就出bug了无法生成目标数据集,现在还没找到为什么提前结束循环,因此决定开始系统的学习一下这一部分的Python。有时候我觉得大学里面管的太严了,根本不让你有时间学自己的东西,导致现在很多人很狼狈。


 

 

第7章 字符串

一、Python 中的字符串特性

Python 中的字符串属于不可变有序序列,使用单引号(')、双引号(")或三引号(''' 或 """)作为定界符,并且不同的引号可以相互嵌套。下面是几种合法的 Python 字符串:

  • 'abc'

  • '123, 中国'(包含中文字符)

  • "python"

  • 'Tom said, "Let\'s go"'

除了支持序列通用操作(包括双向索引、比较大小、计算长度、元素访问、切片等)以外,字符串类型还支持一些特有的用法,如字符串格式化、查找、替换等操作。由于字符串属于不可变序列,不能直接对字符串对象进行元素增加或修改。字符串切片操作也只能用于访问其中的元素,而不能修改其中的字符。此外,字符串对象提供的 replace()translate() 方法以及许多排版方法都不是对原字符串直接修改,而是返回一个新字符串作为结果。

如果需要判断一个变量是否为字符串,可以使用内置方法 isinstance()type()

除了支持 Unicode 编码的 str 类型之外,Python 还支持字节串类型 bytesstr 类型字符串可以通过 encode() 方法使用指定的编码格式转为 bytes 对象,而 bytes 对象则可以通过 decode() 方法解码为 str 字符串。此外,还可以使用内置函数 str()bytes() 在这两种类型之间进行转换。

示例:

>>> type('中国')
<class 'str'>
>>> type('中国'.encode('gbk'))  # 编码成字节串,采用 GBK 编码格式
<class 'bytes'>
>>> isinstance('中国', str)
True
>>> type('中国'.encode()) == bytes  # 默认使用 UTF-8 编码
True
>>> '中国'.encode()  # 编码为字节串
b'\xe4\xb8\xad\xe5\x9b\xbd'
>>> _.decode()  # 解码为字符串
'中国'
>>> bytes('董付国', 'gbk')  # 创建字节串,使用 GBK 编码
b'\xb6\xad\xb8\xb6\xb9\xfa'
>>> str(_, 'gbk')  # 解码字节串
'董付国'

7.1 字符串编码格式简介

最早的字符串编码是美国标准信息交换码 ASCII,仅对 10 个数字、26 个大写英文字母、26 个小写英文字母及一些其他符号进行了编码。ASCII 码采用一个字节来对字符进行编码,最多只能表示 256 个符号。

随着信息技术的发展和信息交换的需要,各国的文字都需要进行编码,不同的应用领域和场合对字符串编码的要求也略有不同,因而设计了多种不同的编码格式,常见的有:UTF-8、UTF-16、UTF-32、GB2312、GBK、CP936、base64、CP437 等。

  • UTF-8 对全世界所有国家需要用到的字符进行了编码。一个字节表示英语字符(兼容 ASCII),3 个字节表示常用汉字,有些语言符号使用 2 个字节(如俄语和希腊语符号)或 4 个字节。

  • GB2312 是中国制定的中文编码,使用一个字节表示英语字符,两个字节表示中文。

  • GBK 是 GB2312 的扩充,CP936 是微软公司在 GBK 基础上开发的编码方式。这些编码格式都使用两个字节表示中文字符。

不同编码格式之间差异很大,采用不同的编码意味着不同的表示和存储形式,把同一字符存入文件时,写入的内容可能会不同,因此在理解其内容时必须了解编码规则并进行正确的解码。如果解码方法不正确,则无法还原信息,从这个角度来看,字符串编码也具有一定的加密效果。

Python 3.x 完全支持中文字符,默认使用 UTF-8 编码格式。无论是一个数字、英文字母,还是一个汉字,计算字符串长度时都按一个字符对待。在 Python 3.x 中甚至可以使用中文作为变量名、函数名等标识符,这在示例中也曾演示过。

示例:

>>> import sys
>>> sys.getdefaultencoding()  # 查看默认编码格式
'utf-8'
>>> s = '中国山东烟台'
>>> len(s)  # 字符串长度,按字符个数计
6
>>> s = '中国山东烟台ABCDE'
>>> len(s)
11
>>> 姓名 = '张三'  # 使用中文作为变量名
>>> print(姓名)  # 输出变量的值
张三

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏驰和徐策

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值