Python 关于编码与解码

在Python中,字符串的编码和解码是处理字符串与字节之间转换的重要操作。

常见的字符串编码方式包括以下几种:

  1. ASCII 编码(American Standard Code for Information Interchange):ASCII 是最早的字符编码标准,使用 7 位二进制数(即 128 个字符)来表示常见的英文字母、数字和符号。
  2. Unicode 编码:Unicode 是一种字符集,为世界上几乎所有的字符分配了一个唯一的数字码点。Unicode 编码可以用不同的实现方式,如 UTF-8、UTF-16 和 UTF-32。
  3. UTF-8 编码(Unicode Transformation Format-8):UTF-8 是一种变长字符编码,能够表示 Unicode 字符集中的所有字符。它使用 1 到 4 个字节来表示一个字符。
  4. UTF-16 编码:UTF-16 是一种变长字符编码,使用 2 或 4 个字节来表示一个字符,常用于表示 Unicode 字符。
  5. UTF-32 编码:UTF-32 是一种固定长度编码,每个字符使用 4 个字节表示,能够准确地表示 Unicode 字符。
  6. Base64 编码:Base64 编码将二进制数据转换为文本字符串的编码方式,常用于数据传输和存储。
  7. URL 编码:也称为百分号编码(Percent Encoding),用于在 URL 中表示特殊字符的编码方式。
  8. 其他编码:还有一些其他编码方式,如 ISO-8859 系列、GB2312、Big5 等,用于特定语言或地区的字符集编码。

其中应用最广莫过于Unicode 、Base64 、URL 编码。

1)、Unicode 是一种字符集,旨在为世界上几乎所有的书写系统中的每个字符分配一个唯一的标识符(码点)。Unicode 包含了各种语言的字符、符号、标点符号以及特殊符号,使得计算机能够更好地支持多语言文本处理。

它主要应用在以下场景:

  1. 国际化应用程序:Unicode 的主要应用场景是在国际化应用程序中,能够支持多种语言的文本输入、显示和处理,使得软件能够在全球范围内使用。
  2. Web 开发:在 Web 开发中,Unicode 编码用于支持网站上的多语言内容,确保用户能够看到并输入各种语言的文本。
  3. 操作系统和软件:许多现代操作系统和软件都采用 Unicode 编码来处理文本数据,以支持不同语言环境下的用户需求。
  4. 数据库存储:在数据库系统中,采用 Unicode 编码可以确保存储和检索各种语言的数据,并支持多语言搜索和排序功能。
  5. 文本处理工具:Unicode 编码在文本处理工具、编辑器和办公软件中得到广泛应用,使得用户能够处理各种语言的文本数据。

2)、Base64 编码是一种将二进制数据转换为文本字符串的编码方式,它将每三个字节的数据转换为四个可打印字符的编码形式。

它主要应用在以下场景:

  1. 数据传输:Base64 编码常用于在网络上传输数据,特别是在电子邮件中,因为电子邮件传输通常只支持文本数据的传输。通过将二进制数据编码为 Base64 格式,可以确保数据在传输过程中不会丢失或损坏。
  2. 数据存储:有时候需要将二进制数据以文本形式存储在文本文件或数据库中,而 Base64 编码可以方便地将二进制数据转换为文本格式进行存储。
  3. 加密签名:在某些情况下,Base64 编码也可用于简单的数据加密或签名,但它并不是真正的加密算法,只是一种编码方式。
  4. 图片和文件传输:在 Web 开发中,Base64 编码经常用于将图片或文件嵌入到 HTML 或 CSS 中,以减少对外部文件的依赖。这种方式可以将图片或文件转换为 Base64 编码的字符串,直接嵌入到代码中。

如:

import base64# 编码
data = b'Hello, World!'
encoded_data = base64.b64encode(data)
print(encoded_data)  # 输出为 b'SGVsbG8sIFdvcmxkIQ=='# 解码
decoded_data = base64.b64decode(encoded_data)
print(decoded_data)  # 输出为 b'Hello, World!'

3)、百分号编码(Percent Encoding)也被称为 URL 编码或 URL 转义,是一种在 URL 中用特殊编码表示特殊字符的方法。在百分号编码中,特殊字符被转换为 % 后跟两位十六进制数的形式,例如空格会被编码为 %20

它主要应用在以下场景:

  1. URL 中的参数传递:在 URL 中传递参数时,如果参数值包含特殊字符(如空格、&、#、%等),为了确保 URL 的正确性和安全性,需要对参数进行百分号编码。例如,空格会被编码为 %20,而 & 会被编码为 %26
  2. 处理特殊字符:在处理文本数据时,有时会遇到需要将特殊字符进行编码的情况。百分号编码可以确保特殊字符在传输和处理过程中不会引起歧义或错误。
  3. 防止注入攻击:在 Web 开发中,对用户输入的内容进行百分号编码可以防止一些常见的注入攻击,如 SQL 注入、XSS 攻击等。

如:

假设有一个 URL 需要传递参数 name=John Doe,其中包含空格,那么在 URL 中应该使用百分号编码:

原始 URL:http://example.com?name=John Doe

编码后的 URL:http://example.com?name=John%20Doe

在 Python 中,可以使用 urllib.parse 模块中的 quote() 函数进行百分号编码:

import urllib.parseoriginal_url = "http://example.com?name=John Doe"
encoded_url = urllib.parse.quote(original_url)
print(encoded_url)  # 输出结果为 "http%3A%2F%2Fexample.com%3Fname%3DJohn%20Doe"

百分号编码在 Web 开发中非常常见,特别是在处理 URL 参数、构建动态 URL、处理表单数据等方面。通过百分号编码,可以确保数据的正确性和安全性,避免出现意外错误或安全漏洞。

总结:

1、选择字符集(编码)的时候,最佳的选择(也是默认的)是UTF-8编码。

2、编码和解码的字符集要保持一致,否则就会出现乱码现场。

3、不能用ISO-8859-1编码保存中文,否则会出现编码黑洞,中文编程?。

4、UTF-8是Unicode的一种实现方案,也是一种变长的编码,最少1个字节(英文和数字),最多4个字节(Emoji),表示中文用3个字节。

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

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

相关文章

推荐一个远程数据库 Supabase

地址:Supabase | The Open Source Firebase Alternative 使用文档: Supabase Docs

IO进程线程(三)文件IO之open/close read/write lseek

一、文件IO (一)概念 文件IO就是系统调用,用户空间进入内核空间的过程就是系统调用。 系统调用没有缓冲机制,效率较低,可移植性也相对较差,实时性高。 文件描述符是使用open函数打开文件时的返回值&…

NIUSHOP开源商城单商户V6版本:前端技术架构的深度解析

摘要: 本文将对NIUSHOP开源商城单商户V6版本的前端技术架构进行深度解析。NIUSHOP V6版本以其强大的多应用多插件组合设计理念、前后端完全分离的技术架构,以及支持多语言、多平台等特点,受到了市场的广泛好评。本文将详细介绍其前端技术栈的…

HOW - BFF 服务实践系列(一)

目录 一、BFF 介绍1.1 BFF 的概念1.2 为什么需要 BFF1.3 举例说明 二、适用于Web前端的BFF应该提供哪些能力2.1 接口聚合(重要)2.2 简化和优化的API2.3 安全和身份验证(重要)2.4 缓存机制2.5 错误处理和重试机制2.6 数据格式转换2…

【算法】贪心算法简介

贪心算法概述 目录 1.贪心算法概念2.贪心算法特点3.贪心算法学习 1.贪心算法概念 贪心算法是一种 “思想” ,即解决问题时从 “局部最优” 从而达到 “全局最优” 的效果。 ①把解决问题的过程分为若干步②解决每一步时候,都选择当前最优解(不关注全局…

RDD实战:排序算子 - sortBy()

在本实战案例中,我们将使用Apache Spark的sortBy()算子来对一个包含学生信息的RDD进行排序操作。 排序规则如下: 首先按照性别升序排列。在性别相同的情况下,按照年龄降序排列。 步骤1:创建学生信息列表 首先,我们创…

基于51单片机和NRF24L01的无线温度监控设计

一、设计功能 由单片机、温度传感器、无线模块NRF24L01以及液晶显示器等构成高精度远 程无线温度监测系统。 温度显示精确到小数点后一位。 按键设定过温值,过温在液晶屏提示。 系统设计 三、器件选择3.1温度信号采集模块 传统的温度检测大多以热敏电阻为传感器&a…

【C++】list的使用(上)

🔥个人主页: Forcible Bug Maker 🔥专栏: STL || C 目录 前言🌈关于list🔥默认成员函数构造函数(constructor)析构函数(destructor)赋值运算符重载 &#x1…

从技术底层超主层依次介绍大模型

目录 # 如何让大模型更聪明? 一、GPT大模型基本概念 二、大模型生态介绍 三、简单描述如何让大模型变得更加聪明 # 如何让大模型更聪明? 一、GPT大模型基本概念 前景: 40年一遇的技术变革;被优化的人口,在未来十…

五分钟“手撕”栈

实现代码放开头,供大家学习与查阅 目录 一、实现代码 二、什么是栈 三、栈的常见操作 底层实现是链表。 入栈 出栈 四、Stack的使用 五、栈的习题 第一题 第二题 第三题 第四题 第五题 第六题 第七题 六、栈、虚拟机栈、栈帧的区别 目录 一、…

Request

一、Request介绍 在计算机网络中,"Request"(请求)通常指的是客户端向服务器发送的请求消息,用于获取特定资源或执行特定操作。在Web开发中,"Request"通常指的是HTTP请求,用于客户端与服…

速盾:香港服务器可以用cdn吗?

香港是一个互联网发达的地区,拥有优质的网络基础设施和大量的服务器机房。对于网站和应用开发者来说,选择一个合适的服务器位置是十分重要的。CDN(内容分发网络)是一种能够通过分布在全球各地的服务器节点来加速访问速度的技术&am…

信号稳定,性能卓越!德思特礁鲨系列MiMo天线正式发布!

作者介绍 礁鲨系列天线,以其独特的外观设计和强大的性能,成为德思特Panorama智能天线家族的最新成员。这款天线不仅稳定提供5G、WIFI和GNSS信号,更能在各类复杂环境中展现出卓越的性能。它的设计灵感来源于海洋中的礁鲨,象征着力量…

内存管理【C++】

内存分布 C中的内存区域主要有以下5种 栈(堆栈):存放非静态局部变量/函数参数/函数返回值等等,栈是向下增长的【地址越高越先被使用】。栈区内存的开辟和销毁由系统自动执行 堆:用于程序运行时动态内存分配&#xff…

电脑丢失api-ms-win-crt-runtime-l1-1-0.dll的多种修复方法

在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是“api-ms-win-crt-runtime-l1-1-0.dll丢失”。这个错误通常发生在Windows操作系统中,它表示一个动态链接库文件丢失或损坏。这个问题可能会导致某些应用程序无法正常运行&#xf…

前端面试题:var const let的区别

1 作用域 var声明的变量具有函数级作用域,这意味着它们在全局作用域或函数内部都有效,且可以被全局访问。 let和const声明的变量具有块级作用域,这意味着它们只在声明它们的代码块内有效,不能跨块或跨函数访问。 2 变量提升 va…

大型企业用什么文件加密软件,五款适合企业的文件加密软件

大型企业在选择文件加密软件时,通常会倾向于那些能够提供全面数据保护、具有高度可定制性、易于管理且能适应复杂组织结构的解决方案。以下是一些适合大型企业使用的文件加密软件: 1.域智盾软件: 作为一款企业级文件加密软件,支持…

曲面细分技术在AI去衣中的创新应用

引言: 随着人工智能技术的飞速发展,其在图像处理领域的应用日益广泛。其中,AI去衣技术因其独特的应用场景而备受瞩目。在这一技术的发展过程中,曲面细分技术发挥了至关重要的作用。本文将深入探讨曲面细分技术在AI去衣中的作用及其…

C语言-单精度和双精度浮点型

文章目录 一、遇到的问题二、解决方案三、问题根因float和double的区别: 总结-浮点数 一、遇到的问题 将NXP项目的代码移植到RH850F1K的项目上时,程序运行异常: u16Volt (uint16)((double)u16ADVal * (double)6.3) 执行到这一行程序就跑飞了…

vue3可以快速简单的操作dom元素了

再也不需要用document.getElementById("myElement")的这种方式来对dom元素进行操作了 我们需要使用模板引用——也就是指向模板中一个 DOM 元素的 ref。我们需要通过这个特殊的 ref attribute 来实现模板引用&#xff1a; <script setup> import { ref, onMo…