Python作为一门流行的编程语言,广泛应用于数据科学、人工智能、Web开发等领域。在Python编程中,字符编码是非常重要的一个概念,它决定了程序如何处理和表示文本数据。本文将详细介绍Python中的字符编码,包括常见的编码类型、编码声明、字符串操作等,并提供相应的代码示例。
一、字符编码
1.1.字符与编码
在Python中,字符串(string)和字节码(bytes)是两种不同的数据类型,它们有以下区别:
- 字符串是用来表示文本数据的,它是不可变的序列类型,可以包含任意数量的字符。字符串通常用于表示人类可读的数据,如文本、标签、名称等。
- 字节码是用来表示二进制数据的,它也是不可变的序列类型,但只能包含字节(8个比特)级别的数据。字节码通常用于表示非文本数据,如图像、音频、压缩文件等。
在Python中,字符串和字节码都可以通过引号来表示,例如:
str1 = 'Hello, world!'
bytes1 = b'Hello, world!'
在这个例子中,str1
是一个字符串,而bytes1
是一个字节码。
需要注意的是,Python中的字符串和字节码是不同的数据类型,它们有着不同的操作和行为。在处理文本数据时,应该使用字符串,而在处理二进制数据时,应该使用字节码。
1.2.常见的字符编码类型
ASCII编码:ASCII编码是最常用的字符编码类型,它包含了128个字符,包括数字、字母和符号等。ASCII编码的取值范围为0-127,适合处理英语文本数据。
UTF-8编码:UTF-8编码是一种可变长度的字符编码类型,它支持全球范围内的字符集,包括中文、日文、韩文等。UTF-8编码的取值范围为0-127,适合处理多语言文本数据。
UTF-16编码:UTF-16编码也是一种可变长度的字符编码类型,它也支持全球范围内的字符集。UTF-16编码的取值范围为0-65535,适合处理一些特定的文本数据。
ISO-8859编码:ISO-8859编码是一种固定的字符编码类型,它支持欧洲地区的语言字符集。ISO-8859编码的取值范围为0-255,适合处理欧洲地区的文本数据。
二、Python中的字符串编码和编码声明
2.1.python中的字符串编码
python版本 | 字节码类型 | 字符串类型 |
---|---|---|
python2.x | str | unicode |
python3.x | bytes | str |
2.2 编码声明
在Python中,可以使用编码声明来指定字符串的字符编码类型。编码声明通常放在脚本文件的开头,例如:
# -*- coding: utf-8 -*-
这表示该脚本文件中的所有字符串都采用UTF-8编码,具体来说就是,此时str类型的字符集是unicode,使用的编码方式是utf-8,这也是在python脚本中支持中文最常见的一种做法。
三、python2字符串
3.1 字符串类型
为了支持其他的字符集,python2增加包含两种字符串类型:str和unicode,后者在定义时需要使用u""
进行声明:
print(type("123"))
print(type(u"123"))
output:
<type 'str'>
<type 'unicode'>
3.2 编码解码方式
python2中的str类型可以认为是字节串码,它仅仅存储了字符串在某种编码下的二进制形式,我们可以显式地指定字符串的解码和编码方式。
Windows平台的CMD中python2的命令行模式下得到的str类型数据也就是GBK编码的二进制字节码:
>>> str = "中文"
>>> str
'\xd6\xd0\xce\xc4'
可以将其转化为UTF-8编码:
>>> str = "中文"
>>> str
'\xd6\xd0\xce\xc4'
>>> str.decode("gbk").encode("utf-8")
'\xe4\xb8\xad\xe6\x96\x87'
如果想要显示GBK编码的字符串
# python2
>>> print '\xB4\xF3\xC4\xAE\xD6\xAE\xD3\xA5'
大漠之鹰
四、python3字符串
4.1 字符串类型
python3中的str类型已经可以被称为字符串类型,而bytes则表示字节码数组。在python3中通过双引号可以直接定义字符串,而字节码数组需要使用b""
进行声明:
print(type("Cat"))
print(type(b"Dog"))
output:
<class 'str'>
<class 'bytes'>
4.2 编码解码方式
python3中的str类型已经可以被称为字符串类型,默认就是Unicode,我不是GBK,可以直接输出正确的文本。
>>> str = "中文"
>>> str
'中文'
python3如果想要显示GBK编码的字符串,需要先转为bytes,然后decode成GBK编码
# python3
>>> print(b'\xB4\xF3\xC4\xAE\xD6\xAE\xD3\xA5'.decode("gbk"))
大漠之鹰