Python Base64 编码与解码

1. 简介

Base64 是一种常见的二进制到文本的编码方式,广泛用于数据传输、加密、存储等场景。Python 的 base64 模块提供了对 Base64 编码和解码的支持,使得开发者可以轻松处理 Base64 编码的数据。

本文将介绍 Base64 编码的基础概念、Python 中的使用方法、常见实践以及最佳实践。


2. 目录

  1. Base64 基础概念
  2. Python Base64 编码和解码
    • base64.b64encode()
    • base64.b64decode()
  3. 常见实践
    • Base64 处理文本
    • Base64 处理图片
    • Base64 处理 JSON 数据
  4. 最佳实践
  5. 总结
  6. 参考资料

3. Base64 基础概念

Base64 是一种将二进制数据转换为 ASCII 码字符串的编码方式,主要用于以下场景:

  • 电子邮件传输(MIME)
  • 在 URL 传输二进制数据
  • 在 JSON 或 XML 结构中嵌入二进制数据
  • API 认证(如 Basic Auth)

Base64 编码的原理:

  1. 将二进制数据分成 6 位一组(因为 2^6 = 64)。
  2. 用 64 个 ASCII 字符表示 6 位的值(A-Z, a-z, 0-9, +, /)。
  3. 若数据长度不是 3 的倍数,则用 = 进行填充。

4. Python Base64 编码和解码

Python 提供了 base64 模块来处理 Base64 编码和解码,常用方法包括:

  • base64.b64encode(data): 对数据进行 Base64 编码
  • base64.b64decode(data): 对 Base64 编码的数据进行解码

4.1 Base64 编码

import base64data = b"Hello, Base64!"
encoded_data = base64.b64encode(data)print("Base64 编码:", encoded_data.decode())  # Base64 编码: SGVsbG8sIEJhc2U2NCE=

说明

  • b64encode() 需要传入 bytes 类型的数据,因此字符串需要先转换为 bytes(如 b"...")。
  • decode() 用于将 bytes 转换为 str 方便显示。

4.2 Base64 解码

decoded_data = base64.b64decode(encoded_data)
print("解码后的数据:", decoded_data.decode())  # 解码后的数据: Hello, Base64!

说明

  • b64decode() 返回的是 bytes,可以使用 .decode() 转换回字符串。

5. 常见实践

5.1 Base64 处理文本

Base64 适用于对文本数据进行编码,例如:

text = "Python Base64 编码示例"
encoded_text = base64.b64encode(text.encode()).decode()
decoded_text = base64.b64decode(encoded_text).decode()print("Base64 编码:", encoded_text)
print("解码后的文本:", decoded_text)

5.2 Base64 处理图片

将图片转换为 Base64 以便在 HTML 或 JSON 中传输:

with open("image.png", "rb") as img_file:encoded_img = base64.b64encode(img_file.read()).decode()print("Base64 编码的图片数据:", encoded_img[:100] + "...")  # 仅展示部分数据

解码并保存图片:

with open("decoded_image.png", "wb") as img_out:img_out.write(base64.b64decode(encoded_img))

5.3 Base64 处理 JSON 数据

在 JSON 结构中存储 Base64 编码的数据:

import jsondata = {"message": "Hello, World!", "image": base64.b64encode(b"binary data").decode()}
json_data = json.dumps(data)# 解析 JSON 并解码 Base64
parsed_data = json.loads(json_data)
decoded_binary = base64.b64decode(parsed_data["image"])print("解析出的文本:", parsed_data["message"])
print("解码后的二进制数据:", decoded_binary)

6. 最佳实践

  1. 确保数据格式正确

    • 进行 Base64 编码时,需要先转换为 bytes
    • 进行 Base64 解码后,通常需要再转换回 str 或者 bytes
  2. 避免 Base64 传输过大数据

    • Base64 会增加 33% 的数据体积(因为 3 字节变为 4 字节)。
    • 适用于短小的二进制数据,不适用于大文件(如视频)。
  3. 使用 URL 安全的 Base64

    • 如果要在 URL 传输数据,可以使用 urlsafe_b64encode()urlsafe_b64decode()
    encoded = base64.urlsafe_b64encode(b"example data").decode()
    decoded = base64.urlsafe_b64decode(encoded).decode()
    print(encoded, decoded)
    
    • 这种方式会用 -_ 替换 +/,避免 URL 转义问题。

7. 总结

方法 作用
base64.b64encode(data) bytes 编码为 Base64
base64.b64decode(data) 将 Base64 解码为 bytes
base64.urlsafe_b64encode(data) URL 安全的 Base64 编码
base64.urlsafe_b64decode(data) URL 安全的 Base64 解码

Base64 是一种简单高效的编码方式,适用于文本、图片、JSON 等多种数据场景,但应避免对大数据量进行编码,以减少存储和传输的额外开销。


8. 参考资料

  • Python 官方文档:base64 模块
  • Base64 介绍:Wikipedia

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/894915.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

photoshop 色彩平衡工具

色彩平衡工具作用于单个像素。 在不勾选保持明度的情况下,加红减青相当于直接增加像素的R值。相应的,加青减红相当于等比例降低G和B。 其他两项亦然。 也就是说,加红相当于直接在R通道上拉曲线。在勾选保持明度的情况下,加红减青会增加R值,降低G和B以保持明度不变。推测此…

从零到一打造商用AIAgent

这篇内容将从整体上介绍打造 AI Agent 的七个步骤,分别是需求梳理、软件选型、提示工程、数据库、构建 UI 界面、测试评估和部署发布。 梳理工作流 第一步,我们需要做的工作就是梳理需求。 首先,我们需要明确,做这个 AI Agent 是为了帮我们解决什么问题?如果你是一位自媒…

[AI/AIGC/LLM] 通义千问QwQ-32B: 阿里巴巴开源的、最新最强开源(推理)大模型 | Apache 2.0

序:2025年3月6日凌晨,阿里巴巴发布并开源全新的推理模型通义千问QwQ-32B。 通过大规模强化学习,千问QwQ-32B在数学、代码及通用能力上实现质的飞跃,整体性能比肩DeepSeek-R1。 在保持强劲性能的同时,千问QwQ-32B还大幅降低了部署使用成本,在消费级显卡上也能实现本地部署…

The Vendi Score: A Diversity Evaluation Metric for Machine Learning 论文笔记

介绍 我们基于生态学和量子统计力学的思想,提出了 Vendi 分数用来解决多样性评估问题 Vendi 分数不需要参考数据集或样本或标签的分布,因此它是通用的,适用于任何可以定义相似性的领域的生成模型、解码算法和数据集 创新 之前的多样性指标的适用性可能受到限制,因为它们需要…

MM-LLMs: Recent Advances in MultiModal Large Language Models 论文笔记

介绍 这是一篇多模态大模型的综述 MM-LLM面临的核心挑战是如何有效地将LLM与其他模式的模型连接起来以实现协作推理 建立了一个网站(https://mm-llms.github.io)来跟踪MM-LLM的最新进展并方便大家更新 模型架构冻结部分不可训练,未冻结部分是可训练的Modality Encoder:对不…

Root cause detection in a service-oriented architecture 论文笔记

背景 MonitorRank 是最早使用随机游走的策略定位故障根因服务的方法,MonitorRank 把系统的服务分成三类:前端服务:负责接收用户的请求以及进一步调用下游请求以完成用户的请求。 应用服务:负责真正处理用户请求的逻辑。 数据服务:负责提供经过包装的数据。(应用服务和数据…

MM-LLMS 论文笔记

介绍 这是一篇多模态大模型的综述 MM-LLM面临的核心挑战是如何有效地将LLM与其他模式的模型连接起来以实现协作推理 建立了一个网站(https://mm-llms.github.io)来跟踪MM-LLM的最新进展并方便大家更新 模型架构冻结部分不可训练,未冻结部分是可训练的Modality Encoder:对不…

MonitorRank 论文笔记

背景 MonitorRank 是最早使用随机游走的策略定位故障根因服务的方法,MonitorRank 把系统的服务分成三类:前端服务:负责接收用户的请求以及进一步调用下游请求以完成用户的请求。 应用服务:负责真正处理用户请求的逻辑。 数据服务:负责提供经过包装的数据。(应用服务和数据…

MicroRank 论文笔记

任务 异常检测->根因定位(服务实例级别)(针对延迟问题) 贡献MicroRank 是第一种通过正常和异常trace提取信息来对微服务应用程序进行根本原因定位的方法 我们提出了一种基于扩展频谱分析的微服务环境中新颖的根本原因定位方法 我们将 OpenTelemetry trace API 纳入 Goog…

Log3T 论文笔记

挑战 ① 基于可用日志先验知识设计的日志解析器性能有限,且不具有泛化性 ② 一些日志解析器在日志本身差异性大时无法正常工作 ③ 劳动密集型模型调整 框架离线训练 使用 WordPiece 进行 Tokenization(子词模型),然后输入到 Transformer 中进行上下文特征集成,然后输入 si…

软件工程-作业2:第一次个人编程作业

这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/SoftwareEngineeringClassof2023这个作业在哪里 https://edu.cnblogs.com/campus/gdgy/SoftwareEngineeringClassof2023/homework/13324这个作业的目标 系统化流程地完成软件开发,使用性能测试工具和单元测试以优化…

LLaVA 论文笔记

介绍 提出了 visual instruction-tuning,这是将指令微调扩展到多模态的首次尝试 相关工作 多模态的指令微调 Agent、指令微调 数据 使用 ChatGPT/GPT-4 来将数据转化为 multimodel instrustion-following data 为每一个图像生成三种 mulmodal instruction-following data,对于…