python中编码与解码简记

python中编码与解码简记

  • 一、读取文本文件指定的编码方式
  • 二、字符串与字节格式互转
  • 三、Base64编码解码
    • 3.1Base64 编解码使用的参数类型
    • 3.2Base64 编码后的字符串显示
    • 3.3Base64 解码后的字符串显示
  • 四、Quoted-Printable编码解码
    • 4.1Quoted-Printable编解码使用的参数类型
    • 4.2Quoted-Printable编码后的字符串显示
    • 4.3Quoted-Printable解码后的字符串显示
  • 参考文档

一、读取文本文件指定的编码方式

示例代码如下:

# 读取输入文件内容
with open(input_file_path, 'r', encoding='utf-8') as input_file:input_data = input_file.read()

在 Python 中,open 函数的 encoding 参数用于指定打开文件时使用的字符编码方式,如果指定的编码方式文件本身的编码方式不匹配,可能会导致读取错误或乱码问题。

文件本身的编码方式取决于操作系统和使用的文本编辑器,可以使用支持显示文件编码的编辑器(如 Notepad++),打开文件查看编码信息。

各操作系统和文本编辑器默认编码如下:

  1. Windows 10 之前的版本——记事本:默认编码是 ANSI,这通常是指当前系统区域设置的代码页,例如 GBK(简体中文区域设置)或 Windows-1252(英语区域设置)。
  2. Windows 10及之后的版本——记事本:默认使用UTF-8编码。
  3. Visual Studio Code、Notepad++编辑器:默认使用 UTF-8 编码,但这可以根据用户配置进行更改。
  4. Linux 和 macOS 系统上:默认的文本文件编码通常是 UTF-8。

在现代操作系统中,UTF-8 已经成为默认和推荐的文本编码标准,使用 encoding=‘utf-8’ 可以最大程度上确保 Python 正确读取文件内容。
如果不指定 encoding 参数,Python 将使用系统默认的编码方式
例如:

  1. Windows 系统的默认编码通常是 cp1252 或 gbk。
  2. Linux 和 macOS 系统的默认编码通常是 utf-8。

UTF-8 是一种常见的字符编码方式,主要特点为:

  1. 广泛支持:UTF-8 是一种通用的字符编码方式,在多种系统和平台上都得到广泛支持。
  2. 能够表示多种字符:UTF-8 可以表示几乎所有的 Unicode 字符,包括 ASCII 字符和其他国际字符。
  3. 兼容性:使用 UTF-8 编码可以确保文件或数据在不同系统和应用程序之间的兼容性。
  4. 标准化:UTF-8 已经成为事实上的标准,许多软件和协议都默认使用 UTF-8 编码。

二、字符串与字节格式互转

示例代码如下:

# 将输入字符串编码为字节数据
input_bytes = input_str.encode('utf-8')
# 将字节数据解码为字符串
input_str = input_bytes.decode('utf-8')

.encode(‘utf-8’):这是字符串对象的方法,用于将字符串按照指定的编码方式进行编码。在这里,编码方式是 UTF-8,指定 UTF-8 编码是一种通用的做法。

  1. 字符串编码为字节数据时,如果包含非 ASCII 字符:可以使用 UTF-8 或GBK编码方式。
  2. 字符串编码为字节数据时,如果仅包含 ASCII 字符:编码方式可以任选,可以使用 ASCII 编码,也可以使用 UTF-8 或GBK编码,但UTF-8 或GBK编码的结果与ASCII 编码的结果一致
  3. 字节数据解码为字符串使用的解码方式要与编码时选择的编码方式一致,但如果编码使用的是ASCII,解码方式可以任选,并不影响结果。

三、Base64编码解码

Base64编码是一种将二进制数据转换为ASCII字符的编码方式,它起源于1960年代的美国军方通信系统,如今已成为网络通信领域的标准编码方法。
Base64编码解码示例代码如下:

import base64# 要编码的二进制数据
binary_data = b'Hello, World!'# 进行 Base64 编码
encoded_data = base64.b64encode(binary_data)# 将编码后的数据转换为字符串
encoded_string = encoded_data.decode('utf-8')print("Base64 编码结果:", encoded_string)# 要解码的 Base64 编码字符串
encoded_string = 'SGVsbG8sIFdvcmxkIQ=='# 解码 Base64 编码字符串
decoded_data = base64.b64decode(encoded_string)# 将解码后的数据转换为字符串
decoded_string = decoded_data.decode('utf-8')print("Base64 解码结果:", decoded_string)

3.1Base64 编解码使用的参数类型

  1. Base64编码,输入必须为字节,输出为字节。
  2. Base64解码,输入可以为字节,也可以为字符串,即如下两条代码等价:
decoded_data = base64.b64decode(encoded_string)
decoded_data = base64.b64decode(encoded_data)

不过,传入字节对象是更常见和推荐的做法,因为 Base64 编码本质上是处理字节数据的。

  1. Base64解码,输出为字节。

3.2Base64 编码后的字符串显示

Base64 编码将二进制数据转换为由 64 个字符组成的字符串,每个字符都代表 6 位二进制数据,这些字符是 ASCII 字符集中的可打印字符。
因此要显示编码后的结果而将编码后的字节数据转换为字符串时,既可指定utf-8,也可指定ascii,如下两条代码,两者效果等价:

#指定utf-8
encoded_string = encoded_data.decode('utf-8')
#指定ascii
encoded_string = encoded_data.decode('ascii')

3.3Base64 解码后的字符串显示

当原始数据为二进制数据时,不需要将解码后的字节数据转换为字符串,但如果原始数据为文本数据,那么就需要显示解码后的文本字符串。
在将解码后的二进制数据转换为字符串时,需要根据原始数据是否包含非 ASCII 字符来选择适当的编码方式。

  1. 原始数据包含非 ASCII 字符,应该使用 UTF-8 编码或其他适当的 Unicode 编码方式进行解码。
  2. 原始数据仅包含 ASCII 字符,可以使用 ASCII 编码或UTF-8 编码进行解码。

四、Quoted-Printable编码解码

Quoted-printable(引用打印)是一种用于在电子邮件和其他文本协议中编码非ASCII字符的方法。该编码将非ASCII字符转换为可打印字符,以便它们可以在各种系统和协议之间正确传输。

Quoted-printable编码的基本原则是:

  1. ASCII字符(字节值小于128)保持不变。
  2. 非ASCII字符(字节值大于或等于128)被转换为等号(=)后跟其十六进制值的表示形式。例如,字母“é”被编码为“=E9”。
  3. 编码要求每行不能超过 76 个字符,如果编码后的内容超过 76 个字符,会在 76 个字符处插入一个软换行符(等号 =),然后在下一行继续。

Quoted-Printable编码解码示例代码如下:

import quopri# 原始字符串
string_data = "Hello, World!"# 将字符串编码为字节
byte_data = string_data.encode('utf-8')# Quoted-Printable 编码
encoded_data = quopri.encodestring(byte_data)
encoded_string = encoded_data.decode('utf-8')
print("Quoted-Printable 编码结果:", encoded_string)# Quoted-Printable 解码
decoded_data = quopri.decodestring(encoded_data)# 将字节数据解码为字符串
decoded_string = decoded_data.decode('utf-8')
print("解码后的字符串:", decoded_string)

4.1Quoted-Printable编解码使用的参数类型

与Base64编解码使用的参数类型完全相同,如下:

  1. Base64编码,输入必须为字节,输出为字节。
  2. Base64解码,输入可以为字节,也可以为字符串,输出为字节。

4.2Quoted-Printable编码后的字符串显示

与Base64编码后的字符串显示方法相同,因为编码后的字符也是ASCII 字符集中的可打印字符。
在将编码后的字节数据转换为字符串时,既可指定utf-8,也可指定ascii,代码与3.2中相同。

4.3Quoted-Printable解码后的字符串显示

与Base64解码后的字符串显示方法相同,不再赘述。

参考文档

Quoted-printable 编码介绍、编码解码转换

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

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

相关文章

基本元器件 - 二极管

目录 二极管的主要参数 二极管的分类 整流二极管 快恢复二极管(FRD) 稳压(齐纳)二级管 瞬态电压抑制器(TVS) 开关二极管 肖特基二极管(SBD) 正偏与反偏 常用封装 伏安特性…

Android中focusableInTouchMode会导致第一次点击事件失效

我们很多时候会对某些View设置点击事件&#xff0c;但是&#xff0c;当对这个View同时设置了focusableInTouchModetrue时&#xff0c;第一次点击事件会被消费为为此View获取焦点。 <Viewandroid:id"id/v_click"android:layout_width"match_parent"andr…

第二篇 多路数据选择器

实验二 多路数据选择器 2.1 实验目的 理解多路数据选择器的概念&#xff1b; 使用门级结构描述实现多路选择器&#xff1b; 使用行为描述实现多路选择器&#xff1b; 完成实验设计、仿真&#xff0c;并在DE1-SOC上验证电路。 2.2 原理介绍 在多路数据传送过程中&#xf…

238.除以自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积。 题目数据保证数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度内完…

Gson解析会丢失默认属性值

问题&#xff1a;类的属性中有设置默认值&#xff0c;Gson中如果不包含该属性时&#xff0c;应该会使用该默认值。如下&#xff1a; class MyPointBean {inner class InnerBean {var altitude 0.0var gradually 1} }val gson GsonBuilder().create()val pStr ""…

linux网络端口

[roottest2 data7]# ifconfig ens33: flags4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 #enss33&#xff1a;设备名称 up 启动 该设备支持广播&#xff0c;正在运行&#xff0c;支持组播 最大传输单元。inet 192.168.60.20 netmask 255.255.255.0 broadca…

Mac连接U盘后怎么读取 Mac连接U盘后怎么取消只读模式

在使用Mac电脑时&#xff0c;连接U盘是一项常见的需求。无论是传输文件还是备份数据&#xff0c;正确地读取U盘对于Mac用户至关重要。然而&#xff0c;当连接的U盘格式为NTFS时&#xff0c;在Mac中进行数据编辑会遇到一些困难。下面我们来看看Mac连接U盘后怎么读取&#xff0c;…

进程线程(一.2)

进程与线程&#xff08;一&#xff09; 并发编程并发与并行高并发 进程特征什么是进程&#xff1f;线程&#xff1f;进程与程序的区别进程与线程区别进程的五状态进程的种类 查看进程命令ps auxps axjpstreekill 进程的创建fork函数fork总结vfork函数fork与vfork区别 获取进程I…

传输协议TCP-原理部分

传输控制协议TCP&#xff08;Transmission Control Protocol&#xff09;一种基于连接的可靠的稳定的无重复的传输协议。 1、TCP头部信息 TCP协议头部信息如下&#xff1a; 一共占用20个字节 16位源端口号&#xff1a;发送进程的主机端口16位目的端口号&#xff1a;接收主机…

实现Dropdown下拉菜单监听键盘上下键选中功能-React

用过ant design的小伙伴都知道&#xff0c;select组件是支持联想搜索跟上下键选中的效果的&#xff0c;但是在项目中我们可能会遇到用select组件无法实现我们的需求的情况&#xff0c;比如说一个div框&#xff0c;里面有input&#xff0c;又有tag标签&#xff0c;在input中输入…

探究 Cosmos Hub 作为国家行为者的可能性

原文标题&#xff1a;《Cosmos Hub: The First Democratic State of Capital》 撰文&#xff1a;Vittecoq Quentin&#xff0c;University of Toulon 编译&#xff1a;Tia&#xff0c;Techub News 本文来源香港Web3媒体&#xff1a;Techub News 介绍 让-雅克卢梭曾断言&am…

LAMP网络服务架构

目录 LAMP 网站服务架构 LAMP的组成部分 LAMP的构建顺序 安装论坛 0.电脑已编译安装Apache&#xff0c;MySQL&#xff0c;PHP 1.创建数据库&#xff0c;并进行授权 2.上传论坛压缩包到 /opt ,并解压 3.上传站点更新包 4.更改论坛目录的属主 5.浏览器访问验证 LAMP 网…

【第4章】SpringBoot实战篇之登录优化(含redis使用)

文章目录 前言一、整合redis1. 引入库2. 配置 二、登录优化1.登录2.拦截器3. 登出4. 修改密码 总结 前言 上一章的登录接口,我们将用户登录信息放置于Map中,存在一个问题,集群部署无法共享以及应用停止用户登录信息即丢失,接下来我们整合redis来整合这个问题。 一、整合redis …

代码随想录35期Day59-JavaScript(day58休息)

Day59题目 LeetCode503下一个更大元素 核心思想:和之前的下一个更高温度差不多,使用单调栈,只不过这个需要你循环查找,可以通过遍历两次数组实现 /*** param {number[]} nums* return {number[]}*/ var nextGreaterElements function(nums) {var len nums.lengthvar res …

低代码平台:打破数据孤岛的利器,推动企业数字化转型

随着数字化浪潮的汹涌而至&#xff0c;企业对于快速开发应用程序的需求变得日益迫切。在这样一个快速变化的时代&#xff0c;如何能够高效地开发并上线新的应用程序&#xff0c;以满足市场和客户的不断变化的需求&#xff0c;成为了企业面临的一大挑战。而低代码开发平台&#…

RSA密钥生成、加解密代码

背景介绍 RSA公钥加密算法是1977年由罗纳德李维斯特&#xff08;Ron Rivest&#xff09;、阿迪萨莫尔&#xff08;Adi Shamir&#xff09;和伦纳德阿德曼&#xff08;Leonard Adleman&#xff09;一起提出的。1987年首次公布&#xff0c;当时他们三人都在麻省理工学院工作。RSA…

强化学习(一) 基本概念和赌博机问题

文章目录 什么是强化学习强化学习的两个基本特征强化学习的其它特征强化学习不同于有监督学习强化学习不同于无监督学习强化学习不同于进化方法强化学习的独特挑战强化学习典例 强化学习的要素强化学习的适用范围强化学习学术主线解决强化学习问题的一般框架赌博机两个影响因素…

SiT : Self-supervised vision Transformer

从NLP Transformer中借鉴而来的视觉 Transformer 在使用大规模监督数据或某种形式的协同监督&#xff08;例如教师网络&#xff09;进行预训练时已被证明是有效的。这些经过监督预训练的视觉Transformer在下游任务中通过最小的改动就能取得出色的结果。 随着监督预训练&#x…

告别盲目推广!Xinstall二维码携参技术,让App运营更精准高效

在移动互联网时代&#xff0c;App推广和运营已成为每个开发者必须面对的重要任务。然而&#xff0c;如何精准地定位目标用户&#xff0c;提高转化率和用户留存率&#xff0c;成为了摆在每个开发者面前的难题。今天&#xff0c;我们就来谈谈如何通过Xinstall二维码携参技术&…

AzSubEnum:针对Azure服务的子域名枚举查询工具

关于AzSubEnum AzSubEnum是一款专门为Azure服务量身定制的子域名枚举查询工具&#xff0c;该工具旨在帮助广大研究人员仔细搜索和识别与各种Azure服务相关的子域名信息。 通过结合查询技术和语句&#xff0c;AzSubEnum能够深入分析Azure的域名架构&#xff0c;并系统地探测和收…