Python 字符编码与转换笔记
本篇给出python的几个和编码相关的函数,然后经由AI整理创作。推荐完成pwn.college [Dealing with Data]练习。
一、字符串与字节串的相互转换
1. 字符串编码为字节串
# 将字符串编码为指定编码的字节串
text = "Hello 世界"
encoded = text.encode('utf-8') # b'Hello \xe4\xb8\x96\xe7\x95\x8c'
2. 字节串解码为字符串
# 将字节串解码为字符串
bytes_data = b'Hello \xe4\xb8\x96\xxe7\x95\x8c'
decoded = bytes_data.decode('utf-8') # "Hello 世界"
二、数值与字节串的转换
1. 十六进制字符串与字节串
# 十六进制字符串转字节串
hex_str = "48656c6c6f"
bytes_data = bytes.fromhex(hex_str) # b'Hello'
# 字节串转十六进制字符串
hex_result = bytes_data.hex() # '48656c6c6f'
2. 整数与字节串的转换
# 整数转字节串
num = 12345
bytes_data = num.to_bytes(length=2, byteorder='big') # b'09'
# 字节串转整数
result = int.from_bytes(bytes_data, byteorder='big') # 12345
三、数值的进制转换
1. 十进制转其他进制
num = 255
# 转十六进制字符串
hex_str = hex(num) # '0xff'
# 转二进制字符串
bin_str = bin(num) # '0b11111111'
2. 其他进制转十进制
# 自动识别进制(0o开头为8进制,0x开头为16进制,0b开头为2进制)
num1 = int('0xff', 0) # 255
# 手动指定进制
num2 = int('ff', 16) # 255
num3 = int('11111111', 2) # 255
四、Base64编码
base64.b64encode和base64.b64decode均是将字节串转为字节串
1. Base64编码
import base64
# 字符串转Base64
text = "Hello World"
encoded = base64.b64encode(text.encode('utf-8')) # b'SGVsbG8gV29ybGQ='
# 文件内容Base64编码
with open('file.txt', 'rb') as f:
file_encoded = base64.b64encode(f.read())
2. Base64解码
# Base64解码为字符串
decoded = base64.b64decode(encoded).decode('utf-8') # "Hello World"
# Base64解码为文件
with open('output.txt', 'wb') as f:
f.write(base64.b64decode(file_encoded))
五、标准输出操作
1. 文本模式输出
import sys
# 输出字符串(自动编码)
sys.stdout.write("Hello World\n")
2. 二进制模式输出
# 直接输出字节数据
sys.stdout.buffer.write(b'Binary data')
使用场景总结
- 网络通信:使用
encode()/decode()进行字符串和字节串转换 - 文件操作:处理二进制文件时使用字节串操作
- 数据序列化:Base64常用于编码二进制数据为文本格式
- 底层数据处理:整数与字节串转换用于处理原始二进制数据
- 调试和显示:hex()和bin()用于查看数据的内部表示
注意事项
- 编码解码时要确保使用相同的字符编码(推荐UTF-8)
- 处理二进制数据时注意字节序(big/little endian)
- Base64编码会增加约33%的数据大小
- 文件操作时要明确区分文本模式和二进制模式