首页 > 编程语言 >Python | 认识编码

Python | 认识编码

时间:2023-07-09 16:01:27浏览次数:42  
标签:编码 UTF 字节 Python 认识 字符串 编码方式

编码(Encoding)是将字符转换为计算机可以处理的二进制数据的过程。在计算机中,所有的文本都是以二进制形式存储的,因此需要使用编码将文本转换为二进制数据。Python 中的编码指的是将字符串转换为字节串(bytes)的过程,或将字节串转换为字符串的过程。

编码与解码

在 Python 中,字符串是以 Unicode 编码存储的,而字节串则是以二进制形式存储的。Python 中在进行数据传输、存储或处理时,需要将字符串转换为字节串或将字节串转换为字符串。下面介绍 Python 中的编码和解码函数以及使用方法。

编码函数:

  1. encode(encoding='utf-8', errors='strict'):将字符串编码为字节串,参数 encoding 指定编码方式,参数 errors 指定编码错误的处理方式。例如:
s = "Hello, World!"
b = s.encode('utf-8')
print(b)  # b'Hello, World!'
  1. bytes(string, encoding='utf-8', errors='strict'):将字符串编码为字节串,与 encode() 函数类似,但是可以直接将字符串转换为字节串。例如:
s = "Hello, World!"
b = bytes(s, 'utf-8')
print(b)  # b'Hello, World!'

解码函数:

  1. decode(encoding='utf-8', errors='strict'):将字节串解码为字符串,参数 encoding 指定编码方式,参数 errors 指定解码错误的处理方式。例如:
b = b'Hello, World!'
s = b.decode('utf-8')
print(s)  # Hello, World!
  1. str(object='', encoding='utf-8', errors='strict'):将字节串解码为字符串,与 decode() 函数类似,但是可以直接将字节串转换为字符串。例如:
b = b'Hello, World!'
s = str(b, 'utf-8')
print(s)  # Hello, World!

在进行编码和解码时,需要注意以下几点:

  1. 需要使用相同的编码方式进行编码和解码,否则会出现乱码或编码错误。
  2. 在进行文件读写时,需要指定文件的编码方式,以便正确地读写文件。
  3. 在进行网络通信时,需要将数据转换为二进制形式进行传输,并在接收方进行解码,以便正确地解析数据。

编码方式

Python 支持多种编码方式,在 Python 3.x 中,默认字符串的编码方式为 UTF-8。其中,UTF-8 是最常用的编码方式之一,它可以表示几乎所有的字符集,同时也是互联网和电子邮件中的标准编码方式。

1、UTF-8

UTF-8(Unicode Transformation Format-8)是一种变长字符编码,用于将 Unicode 字符集中的字符编码为字节串。UTF-8 是一种通用的字符编码方式,支持几乎所有的字符集,是互联网和电子邮件中的标准编码方式。

UTF-8 编码是一种可变长编码方式,采用 1~4 个字节表示一个字符。对于 ASCII 字符集中的字符,UTF-8 使用一个字节表示,与 ASCII 编码兼容,即 ASCII 编码和 UTF-8 编码的前 128 个字符是一样的。对于其他字符,UTF-8 使用多个字节表示,不同的字符使用不同的字节数表示,具体规则如下:

  • 对于 0x00000000 ~ 0x0000007F(ASCII 字符集),使用 1 个字节表示,ASCII 编码和 UTF-8 编码相同。
  • 对于 0x00000080 ~ 0x000007FF,使用 2 个字节表示,第一个字节的前 5 位为 110,第二个字节的前 2 位为 10。
  • 对于 0x00000800 ~ 0x0000FFFF,使用 3 个字节表示,第一个字节的前 4 位为 1110,第二、三个字节的前 2 位为 10。
  • 对于 0x00010000 ~ 0x001FFFFF,使用 4 个字节表示,第一个字节的前 3 位为 11110,第二、三、四个字节的前 2 位为 10。

UTF-8 编码可以使用 Python 中的 encode() 函数将字符串编码为字节串,例如:

s = "你好,世界!"
b = s.encode('utf-8')
print(b)  # b'\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x8c\xe4\xb8\x96\xe7\x95\x8c\xef\xbc\x81'

UTF-8 编码也可以使用 Python 中的 decode() 函数将字节串解码为字符串,例如:

b = b'\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x8c\xe4\xb8\x96\xe7\x95\x8c\xef\xbc\x81'
s = b.decode('utf-8')
print(s)  # 你好,世界!

总之,UTF-8 是一种通用的字符编码方式,支持几乎所有的字符集,在 Python 中也得到了广泛的应用。在进行编码和解码时,需要注意使用相同的编码方式进行处理,以避免出现乱码或编码错误。

2、GB2312

GB2312 是一种中文编码方式,是中国国家标准 GB 2312-1980 中规定的字符集编码方式。GB2312 编码方式使用 2 个字节表示一个字符,其中第一个字节的范围是 0xB00xF7,第二个字节的范围是 0xA10xFE,共包含 6763 个常用汉字和符号。

GB2312 编码方式不支持繁体字和生僻字,因此在使用中文编码方式时,需要根据实际需要选择合适的编码方式。由于 GB2312 编码方式仅适用于中文字符集,不支持英文字符集和其他语言字符集,因此在进行跨语言编程和跨语言通信时,需要使用更通用的字符编码方式,如 UTF-8。

在 Python 中,可以使用 GB2312 编码方式将字符串编码为字节串,例如:

s = "你好,世界!"
b = s.encode('gb2312')
print(b)  # b'\xc4\xe3\xba\xc3\xa3\xac\xca\xc0\xbd\xe7\xa1\xa3'

GB2312 编码方式也可以使用 Python 中的 decode() 函数将字节串解码为字符串,例如:

b = b'\xc4\xe3\xba\xc3\xa3\xac\xca\xc0\xbd\xe7\xa1\xa3'
s = b.decode('gb2312')
print(s)  # 你好,世界!

需要注意的是,在使用 GB2312 编码方式时,需要保证编码方式的一致性,以避免出现乱码或编码错误。同时,由于 GB2312 编码方式仅适用于中文字符集,因此建议在进行跨语言编程和跨语言通信时使用更通用的字符编码方式,如 UTF-8。

3、GBK

GBK 是一种中文编码方式,是 GB2312 编码方式的扩展,支持更多的汉字和符号。GBK 编码方式使用 12 个字节表示一个字符,其中第一个字节的范围是 0x81~0xFE,第二个字节的范围也是 0x40~0xFE。GBK 编码方式共支持 21886 个汉字和符号,包括 GB2312 中的所有字符和一些生僻字。

GBK 编码方式是中国国家标准 GBK 13000-2018 中规定的字符集编码方式,是 GB2312 编码方式的标准扩展方式,广泛应用于中文计算机系统和中文网页编码中。

在 Python 中,可以使用 GBK 编码方式将字符串编码为字节串,例如:

s = "你好,世界!"
b = s.encode('gbk')
print(b)  # b'\xc4\xe3\xba\xc3\xa3\xac\xca\xc0\xbd\xe7\xa1\xa3'

GBK 编码方式也可以使用 Python 中的 decode() 函数将字节串解码为字符串,例如:

b = b'\xc4\xe3\xba\xc3\xa3\xac\xca\xc0\xbd\xe7\xa1\xa3'
s = b.decode('gbk')
print(s)  # 你好,世界!

需要注意的是,在使用 GBK 编码方式时,需要保证编码方式的一致性,以避免出现乱码或编码错误。同时,由于 GBK 编码方式仅适用于中文字符集,因此建议在进行跨语言编程和跨语言通信时使用更通用的字符编码方式,如 UTF-8。

4、ISO-8859-1

ISO-8859-1(也称为 Latin-1)是一种单字节编码方式,用于表示拉丁字母表中的字符,包括英语、法语、德语、西班牙语等欧洲语言中的所有字符。ISO-8859-1 编码方式使用 1 个字节表示一个字符,范围是 0x00~0xFF,共支持 256 个字符。

ISO-8859-1 编码方式不支持中文字符集、日文字符集和韩文字符集,因此在进行跨语言编程和跨语言通信时,需要使用更通用的字符编码方式,如 UTF-8。

在 Python 中,可以使用 ISO-8859-1 编码方式将字符串编码为字节串,例如:

s = "Hello, World!"
b = s.encode('iso-8859-1')
print(b)  # b'Hello, World!'

ISO-8859-1 编码方式也可以使用 Python 中的 decode() 函数将字节串解码为字符串,例如:

b = b'Hello, World!'
s = b.decode('iso-8859-1')
print(s)  # Hello, World!

需要注意的是,在使用 ISO-8859-1 编码方式时,需要保证编码方式的一致性,以避免出现乱码或编码错误。同时,由于 ISO-8859-1 编码方式仅适用于欧洲语言字符集,因此建议在进行跨语言编程和跨语言通信时使用更通用的字符编码方式,如 UTF-8。

应用场景

除了字符串和字节串之间的转换,编码在 Python 中还有其他方面的应用。下面列举了几个常见的应用场景:

  1. 文件读写:在 Python 中,文件的读写需要指定文件的编码方式。例如,可以使用 open() 函数打开文件,并指定文件的编码方式,然后对文件进行读写操作。
  2. 网络通信:在进行网络通信时,需要将数据转换为二进制形式进行传输。在 Python 中,可以使用编码函数将字符串转换为字节串,然后通过网络传输,接收方再将字节串转换为字符串。
  3. 数据库操作:在进行数据库操作时,需要将字符串转换为字节串或将字节串转换为字符串。在 Python 中,可以使用编码函数将字符串转换为字节串,然后存储到数据库中,或从数据库中读取字节串,并使用解码函数将其转换为字符串。
  4. 数据处理:在进行数据处理时,需要将不同编码方式的数据进行转换和处理。在 Python 中,可以使用 codecs 模块对不同编码方式之间的数据进行转换和转码。

总结

总之,编码在 Python 中有着广泛的应用,涉及到多个方面,开发者需要了解不同编码方式之间的差异和转换方法,以便正确地处理字符串和字节串。同时,为了确保代码的可读性和可维护性,建议使用统一的编码方式(如 UTF-8)进行开发和存储,避免出现编码问题。

标签:编码,UTF,字节,Python,认识,字符串,编码方式
From: https://www.cnblogs.com/zhangxuegold/p/17538852.html

相关文章

  • python打包Windows.exe程序(pyinstaller)
    python打包Windows.exe程序(pyinstaller)基础命令pipinstallpyinstaller使用pip命令来安装pyinstaller模块。-F:pyinstaller-Fhello.py-phello2.py-D:pyinstaller-Dhello.py-phello2.py-i:pyinstaller-itb.ico-Fhello.py-phello2.py其中前一个文件hel......
  • python获取小红书web_session,以及解决x-s签名验证(2023-07-09)
    一、web_session请求接口:https://edith.xiaohongshu.com/api/sns/web/v1/login/activate请求类型:post提交数据:{}这儿是两个字符{},笔者最初提交None,总得不到结果,chromeF12才发现需要这两个字符。二、签名验证x-s 该请求需要x-s签名验证,签名代码如下:a1="186d30820a4......
  • python:File
     defgetFile(prefixletter:str,ok:bool):"""文件名添加后缀:paramprefixletter::paramok:True增加后缀,否则为删除:return:"""try:nowfoloder=os.getcwd()curpath=os.path.join(nowfoloder,r&q......
  • python - 函数(二)
    4.传递列表defgreet_users(names):"""向列表中的每位用户发出问候。"""fornameinnames:msg=f"Hello,{name.title()}"print(msg)usernames=['hanks','jackson','jimmy']......
  • 中转转运运输问题——Python实现
    在供应链中,中转运输是一项关键活动,用于解决商品在运输过程中的各种限制和需求。商业部门承担中转运输的责任,组织商品的再次发运,以确保顺利的货物流动。中转运输在供应链中具有重要作用,主要原因如下:物流条件限制:由于运输条件的限制,商品可能无法直接一次性运送到目的地。这可能涉......
  • python - 函数(一)
    1.示例defgreet_user():#函数定义"""显示简单的问候语"""#文档字符串,描述了函数的功能。Python基于此生成有关函数的文档print("Hello!")greet_user()1.1参数defgreet_user(username):"""显示简单的问候语"&......
  • python: generate and decode QrCode
     #encoding:utf-8#-*-coding:UTF-8-*-#版权所有2023©涂聚文有限公司#许可信息查看:#描述:#Author:geovindu,GeovinDu涂聚文.#IDE:PyCharm2023.1python311#Datetime:2023/7/511:08#User:geovindu#Product:UI#Project......
  • python笔记1.2
    基本输入函数input的应用name=input('请输入您的姓名')print('您的姓名为:'+name)num=int(input('请输入您的幸运数字'))#print('您的幸运数字为:'+num)#字符串和整数无法运算print('您的幸运数字为:',num)#正常返回num单行注释#正常返回num多行注释'''版权所有......
  • python笔记:第四章使用字典
    1.1概述说白了就是键值对的映射关系不会丢失数据本身关联的结构,但不关注数据的顺序是一种可变类型格式:dic={键:值,键:值}键的类型:字典的键可以是任何不可变的类型,如浮点数,字符串,元组1.2函数dict可以从其他映射或键值对创建字典items=[('name','Gumby'),('ag......
  • python笔记1.1
    ASCII码使用print输出中文Unicode编码:print(ord("天"))#使用ord()查询“天”的Unicode编码为22825print("\u5929")#22825的十六进制为5929返回值为“天” 使用print()将内容输出到文件fp=open("note.txt","w")#打开文件,w——writeprint("北京欢迎你",file=fp)#输出......