当前位置: 首页 > news >正文

如何在 Python 中处理 Unicode

介绍

Unicode 是世界上大多数计算机的标准字符编码。它确保文本(包括字母、符号、表情符号,甚至控制字符)在不同设备、平台和数字文档中显示一致,无论使用的操作系统或软件是什么。它是互联网和计算机行业的重要组成部分,没有它,互联网将会更加混乱和难以使用。

Unicode 本身不是编码,而更像是地球上几乎所有可能字符的数据库。Unicode 包含一个代码点,用于标识其数据库中的每个字符,其值范围从 0 到 110 万,这意味着它很可能不会很快用尽这些独特的代码点。Unicode 中的每个代码点都表示为 U+n,其中 U+ 表示它是一个 Unicode 代码点,n 是字符的四到六个十六进制数字集。它比 ASCII 更强大,ASCII 只表示 128 个字符。使用 ASCII 在全球范围内交换数字文本是困难的,因为它基于美国英语,不支持重音字符。另一方面,Unicode 包含几乎 15 万个字符,涵盖了地球上每种语言的字符。

随之而来的是对编程语言(如 Python)的要求,以正确处理文本,并使软件能够实现国际化。Python 可以用于各种用途——从电子邮件到服务器再到网络——并且具有一种优雅的处理 Unicode 的方式,即通过采用 Unicode 标准来处理其字符串。

然而,在 Python 中处理 Unicode 可能会令人困惑并导致错误。本教程将介绍如何在 Python 中使用 Unicode 的基础知识,以帮助您避免这些问题。您将使用 Python 解释 Unicode,使用 Python 的规范化函数对数据进行规范化,并处理 Python Unicode 错误。

先决条件

要按照本教程操作,您需要:

  • 本地安装或远程服务器上安装的 Python。如果您尚未设置 Python,可以按照我们的教程《如何安装 Python 3 并设置编程环境》进行设置。选择适合您的 Linux 发行版的版本。
  • 熟悉基本的 Python 编程和 Python 的字符串方法
  • 知道如何使用 Python 交互式控制台

步骤 1 —— 在 Python 中转换 Unicode 代码点

编码是将数据表示为计算机可读形式的过程。有许多编码数据的方法——ASCII、Latin-1 等——每种编码都有其优势和劣势,但也许最常见的是 UTF-8。这是一种编码类型,允许来自世界各地的字符在单个字符集中表示。因此,UTF-8 对于任何处理国际化数据的人来说都是一种必不可少的工具。总的来说,UTF-8 对于大多数目的来说都是一个不错的选择。它相对高效,并且可以与各种软件一起使用。UTF-8 将 Unicode 代码点转换为计算机可以理解的十六进制字节。换句话说,Unicode 是映射,而 UTF-8 使计算机能够理解该映射。

在 Python 3 中,默认的字符串编码是 UTF-8,这意味着 Python 字符串中的任何 Unicode 代码点都会自动转换为相应的字符。

在这一步中,您将使用 Python 中的 Unicode 代码点创建版权符号(©)。首先,在终端中启动 Python 交互式控制台,然后输入以下内容:

>>> s =  '\u00A9'
>>> s

在上述代码中,您创建了一个带有 Unicode 代码点 \u00A9 的字符串 s。如前所述,由于 Python 字符串默认使用 UTF-8 编码,打印 s 的值会自动将其更改为相应的 Unicode 符号。请注意,代码点前面的 \u 是必需的。没有它,Python 将无法转换代码点。上述代码的输出将返回相应的 Unicode 符号:

'©'

Python 编程语言提供了用于编码和解码字符串的内置函数。encode() 函数将字符串转换为字节字符串。

为了演示这一点,打开 Python 交互式控制台,然后输入以下代码:

>>> '🅥'.encode('utf-8')

这将产生字符的字节字符串作为输出:

b'\xf0\x9f\x85\xa5'

请注意,每个字节前面都有 \x,表示它是一个十六进制数。

接下来,您将使用 decode() 函数将字节字符串转换回字符串。decode() 函数接受编码类型作为参数。值得一提的是,decode() 函数只能解码字节字符串,这是通过在字符串开头使用字母 b 来指定的。去除 b 将导致 AttributeError

在您的控制台中输入:

>>> b'\xf0\x9f\x85\xa5'.decode('utf-8')

该代码将返回如下输出:

'🅥'

现在,您对 Python 中的 Unicode 解释有了基本的了解。接下来,您将深入了解 Python 内置的 unicodedata 模块,以在字符串上执行高级的 Unicode 技术。

步骤 2 —— 在 Python 中对 Unicode 进行规范化

在这一步中,你将学习如何在 Python 中对 Unicode 进行规范化。规范化有助于确定不同字体中的两个字符是否相同,这在两个具有不同代码点但产生相同结果的字符时非常有用。例如,Unicode 字符 Râ„œ 在人眼中是相同的,因为它们都是字母 R,但计算机认为它们是不同的字符。

下面的代码示例进一步说明了这一点。打开你的 Python 控制台,输入以下内容:

>>> styled_R = 'ℜ'
>>> normal_R = 'R'
>>> styled_R == normal_R

你将得到以下输出:

False

该代码输出 False,因为 Python 字符串不认为这两个字符是相同的。这种区分能力是在处理 Unicode 时规范化很重要的原因。

在 Unicode 中,一些字符是由两个或多个字符组合而成的。在这种情况下,规范化非常重要,因为它可以使你的字符串保持一致。为了更好地理解这一点,打开你的 Python 控制台,输入以下代码:

>>> s1 =  'hôtel'
>>> s2 = 'ho\u0302tel'
>>> len(s1), len(s2)

在上面的代码中,你创建了一个包含 ô 字符的字符串 s1,在第二行,字符串 s2 包含了尖音字符( Ì‚ )。执行后,代码返回以下输出:

(5, 6)

上面的输出显示,这两个字符串由相同的字符组成,但长度不同,这意味着它们不会相等。在同一个控制台中输入以下内容进行测试:

>>> s1 == s2

该代码返回以下输出:

False

尽管字符串变量 s1s2 产生相同的 Unicode 字符,但它们的长度不同,因此它们不相等。

你可以使用 normalize() 函数来解决这个问题,这也是你将在下一步中要做的事情。

步骤 3 —— 使用 NFD、NFC、NFKD 和 NFKC 对 Unicode 进行规范化

在这一步中,你将使用 Python 的 unicodedata 库中的 normalize() 函数来对 Unicode 字符串进行规范化。unicodedata 模块提供了字符查找和规范化功能。normalize() 函数的第一个参数可以是规范化形式,第二个参数是要规范化的字符串。Unicode 有四种规范化形式可供使用:NFD、NFC、NFKD 和 NFKC。

NFD 规范化形式将一个字符分解为多个组合字符。它使你的文本不区分重音,这在搜索和排序时非常有用。你可以通过将字符串编码为字节来实现这一点。

在你的控制台中输入以下内容:

>>> from unicodedata import normalize
>>> s1 =  'hôtel'
>>> s2 = 'ho\u0302tel'
>>> s1_nfd = normalize('NFD', s1)
>>> len(s1), len(s1_nfd)

该代码产生以下输出:

(5, 6)

正如示例所示,规范化字符串 s1 会使其长度增加一个字符。这是因为 ô 符号被分解为两个字符 oˆ,你可以通过以下代码确认:

>>> s1.encode(), s1_nfd.encode()

执行后的输出显示,在对规范化后的字符串进行编码后,o 字符从字符串 s1_nfd 中分离出来:

(b'h\xc3\xb4tel', b'ho\xcc\x82tel')

NFC 规范化形式首先分解一个字符,然后重新组合为任何可用的组合字符。由于 NFC 会将一个字符串组合成最短可能的输出,W3C 建议在网络上使用 NFC。键盘输入默认返回组合字符串,因此在这种情况下使用 NFC 是个好主意。

作为示例,在你的交互式控制台中输入以下内容:

>>> from unicodedata import normalize
>>> s2_nfc = normalize('NFC', s2)
>>> len(s2), len(s2_nfc)

该代码产生以下输出:

(6, 5)

在示例中,规范化字符串 s2 的长度减少了一个字符。你可以通过在交互式控制台中运行以下代码来确认这一点:

>>> s2.encode(), s2_nfc.encode()

该代码的输出是:

(b'ho\xcc\x82tel', b'h\xc3\xb4tel')

输出显示,oˆ 字符合并成了单个 ô 字符。

NFKDNFKC 规范化形式用于“严格”规范化,并可用于与 Unicode 字符串相关的各种搜索和模式匹配问题。NFKD 和 NFKC 中的 “K” 代表兼容性。

NFD 和 NFC 规范化形式会分解字符,但 NFKD 和 NFKC 会对不相似但等效的字符执行兼容性分解,去除任何格式上的区别。例如,字符串 â‘¡â‘ 21 不相似,但它们都表示相同的值。NFKC 和 NFKD 规范化形式会去除这些字符中的格式(在本例中是数字周围的圆圈),以提供它们的最简形式。

以下示例演示了 NFD 和 NFKD 规范化形式之间的区别。在你的 Python 交互式控制台中输入以下内容:

>>> s1 = '2�ô'
>>> from unicodedata import normalize
>>> normalize('NFD', s1), normalize('NFKD', s1)

你将得到以下输出:

('2�ô', '25ô')

输出显示,NFD 形式无法分解字符串 s1 中的指数字符,但 NFKD 去除了指数格式,并用其等效形式(作为数字的 5)替换了兼容字符。请记住,NFD 和 NFKD 规范化形式仍在分解字符,因此你应该期望 ô 字符的长度增加一个,就像你在前面的 NFD 示例中看到的那样。你可以通过运行以下代码来确认这一点:

>>> len(normalize('NFD', s1)), len(normalize('NFKD', s1))

该代码将返回以下内容:

(4, 4)

NFKC 规范化形式的工作方式类似,但是它会组合字符而不是分解字符。在同一个 Python 控制台中输入以下内容:

>>> normalize('NFC', s1), normalize('NFKC', s1)

该代码返回以下内容:

('2�ô', '25ô')

由于 NFKC 遵循组合方法,你应该期望 ô 字符的字符串长度减少一个,而不是分解的情况下增加一个。你可以通过运行以下代码来确认这一点:

>>> len(normalize('NFC', s1)), len(normalize('NFKC', s1))

这将返回以下输出:

(3, 3)

通过执行上述步骤,你将对规范化形式有了工作知识,并了解了它们之间的区别。在下一步中,你将解决 Python 中的 Unicode 错误。

第四步 —— 解决 Python 中的 Unicode 错误

在处理 Python 中的 Unicode 时,可能会出现两种类型的 Unicode 错误,即 UnicodeEncodeError 和 UnicodeDecodeError。虽然这些 Unicode 错误可能令人困惑,但可以加以处理。在本步骤中,您将解决这两种错误。

解决 UnicodeEncodeError

Unicode 编码是将 Unicode 字符串使用特定编码转换为字节的过程。当尝试对包含无法用指定编码表示的字符的字符串进行编码时,就会出现 UnicodeEncodeError。

要创建此错误,您将对包含不属于 ASCII 字符集的字符的字符串进行编码。

打开您的控制台,输入以下内容:

>>> ascii_supported = '\u0041'
>>> ascii_supported.encode('ascii')

以下是您的输出:

b'A'

然后输入以下内容:

>>> ascii_unsupported = '\ufb06'
>>> ascii_unsupported.encode('utf-8')

您将得到以下输出:

b'\xef\xac\x86'

最后,输入以下内容:

>>> ascii_unsupported.encode('ascii')

然而,当运行此代码时,您将收到以下错误:

Traceback (most recent call last):File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character '\ufb06' in position 0: ordinal not in range(128)

ASCII 字符集的字符数量有限,当发现一个不在 ASCII 字符集中的字符时,Python 会抛出错误。由于 ASCII 字符集不识别代码点 \ufb06,Python 返回一个错误消息,指出 ASCII 仅有 128 个字符,而该代码点的对应十进制值不在该范围内。

您可以通过在 encode() 函数中使用 errors 参数来处理 UnicodeEncodeError。errors 参数可以有三个值:ignorereplacexmlcharrefreplace

打开您的控制台,输入以下内容:

>>> ascii_unsupported = '\ufb06'
>>> ascii_unsupported.encode('ascii', errors='ignore')

您将得到以下输出:

b''

接下来输入以下内容:

>>> >>> ascii_unsupported.encode('ascii', errors='replace')

输出将是:

b'?'

最后,输入以下内容:

>>> ascii_unsupported.encode('ascii', errors='xmlcharrefreplace')

输出为:

b'&#64262;'

在每种情况下,Python 都不会抛出错误。

如前面的示例所示,ignore 会跳过无法编码的字符,replace 会用 ? 替换字符,xmlcharrefreplace 会用 XML 实体替换无法编码的字符。

解决 UnicodeDecodeError

当尝试将包含无法用指定编码表示的字符的字符串解码时,就会出现 UnicodeDecodeError。

要创建此错误,您将尝试将字节字符串解码为无法解码的编码。

打开您的控制台,输入以下内容:

>>> iso_supported = '§'
>>> b = iso_supported.encode('iso8859_1')
>>> b.decode('utf-8')

您将收到以下错误:

Traceback (most recent call last):File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa7 in position 0: invalid start byte

如果遇到此错误,您可以在 decode() 函数中使用 errors 参数,这可以帮助您解码字符串。errors 参数接受两个值,即 ignorereplace

为了演示这一点,打开您的 Python 控制台,输入以下代码:

>>> iso_supported = '§A'
>>> b = iso_supported.encode('iso8859_1')
>>> b.decode('utf-8', errors='replace')

您将得到以下输出:

'�A'

然后输入以下内容:

>>> b.decode('utf-8', errors='ignore')

您将得到以下输出:

'A'

在上述示例中,使用 decode() 函数中的 replace 值添加了一个 � 字符,而使用 ignore 在解码器(在本例中为 utf-8)无法解码字节时返回空字符串。

在解码任何字符串时,请注意您不能假设编码是什么。要解码任何字符串,您必须知道它是如何编码的。

结论

本文介绍了如何在 Python 中使用 Unicode 的基础知识。您对字符串进行了编码和解码,使用 NFD、NFC、NFKD 和 NFKC 对数据进行了规范化,并解决了 Unicode 错误。您还在涉及排序和搜索的场景中使用了规范化形式。这些技术将帮助您使用 Python 处理 Unicode 问题。

相关文章:

如何在 Python 中处理 Unicode

介绍 Unicode 是世界上大多数计算机的标准字符编码。它确保文本&#xff08;包括字母、符号、表情符号&#xff0c;甚至控制字符&#xff09;在不同设备、平台和数字文档中显示一致&#xff0c;无论使用的操作系统或软件是什么。它是互联网和计算机行业的重要组成部分&#xf…...

CSDN文章导出PDF整理状况一览

最近CSDN有了导出文章PDF功能&#xff0c;导出的PDF还可以查询&#xff0c; 因此&#xff0c;把文章导出PDF&#xff0c;备份一下自己的重要资料。 目前整理内容如下 No.文章标题整理时间整理之后 文章更新Size &#xff08;M&#xff09;10001_本地电脑-开发相关软件保持位…...

jmeter-05变量(用户定义变量,用户参数,csv文档参数化)

文章目录 一、jmeter有三种变量二、用户定义变量(这个更多的可以理解为全局变量)1、设置2、引用三、用户参数(可以理解为局部变量)1、设置2、引用3、用户参数化要配合线程组的线程数使用4、结果五、csv文档参数1、创建csv文件2、设置2、引用csv文件可以配合线程组的线程数,…...

CSS之水平垂直居中

如何实现一个div的水平垂直居中 <div class"content-wrapper"><div class"content">content</div></div>flex布局 .content-wrapper {width: 400px;height: 400px;background-color: lightskyblue;display: flex;justify-content:…...

2.8日学习打卡----初学RabbitMQ(三)

2.8日学习打卡 一.springboot整合RabbitMQ 之前我们使用原生JAVA操作RabbitMQ较为繁琐&#xff0c;接下来我们使用 SpringBoot整合RabbitMQ&#xff0c;简化代码编写 创建SpringBoot项目&#xff0c;引入RabbitMQ起步依赖 <!-- RabbitMQ起步依赖 --> <dependency&g…...

Unity学习笔记(零基础到就业)|Chapter02:C#基础

Unity学习笔记&#xff08;零基础到就业&#xff09;&#xff5c;Chapter02:C#基础 前言一、复杂数据&#xff08;变量&#xff09;类型part01&#xff1a;枚举数组1.特点2.枚举&#xff08;1&#xff09;基本概念&#xff08;2&#xff09;申明枚举变量&#xff08;3&#xff…...

容器化的基础概念:不可变基础设施解释:将服务器视为乐高积木,而非橡皮泥。

不可变基础设施解释&#xff1a;将服务器视为乐高积木&#xff0c;而非橡皮泥。 想象一下用乐高积木代替橡皮泥进行搭建。使用橡皮泥时&#xff0c;您可以直接塑形和改变它。而使用乐高积木&#xff0c;您需要逐个零件搭建特定结构&#xff0c;并在需要时整体替换它们。这就是…...

智胜未来,新时代IT技术人风口攻略-第二版(弃稿)

文章目录 抛砖引玉 鸿蒙生态小科普焦虑之下 理想要落到实处校园鼎力 鸿蒙发展不可挡培训入场 机构急于吃红利企业布局 鸿蒙应用规划动智胜未来 技术人风口来临 鸿蒙已经成为行业的焦点&#xff0c;未来的发展潜力无限。作为一名程序员兼UP主&#xff0c;我非常荣幸地接受了邀请…...

Git分支和迭代流程

Git分支 feature分支&#xff1a;功能分支 dev分支&#xff1a;开发分支 test分支&#xff1a;测试分支 master分支&#xff1a;生产环境分支 hotfix分支&#xff1a;bug修复分支。从master拉取&#xff0c;修复并测试完成merge回master和dev。 某些团队可能还会有 reale…...

数据库管理-第150期 Oracle Vector DB AI-02(20240212)

数据库管理150期 2024-02-12 数据库管理-第150期 Oracle Vector DB & AI-02&#xff08;20240212&#xff09;1 LLM2 LLM面临的挑战3 RAG4 向量数据库LLM总结 数据库管理-第150期 Oracle Vector DB & AI-02&#xff08;20240212&#xff09; 作者&#xff1a;胖头鱼的鱼…...

MySQL双写机制

双写机制 问题的出现 在发生数据库宕机时&#xff0c;可能Innodb正在写入某个页到表中&#xff0c;但是这个页只写了一部分&#xff0c;这种情况被称为部分写失效&#xff0c;虽然innodb会先写重做日志,在修改页&#xff0c;但是重做日志中记录的是对页的物理操作&#xff0c;但…...

uniapp的配置和使用

①安装环境和编辑器 注册小程序账号 微信开发者工具下载 uniapp 官网 HbuilderX 下载 首先先下载Hbuilder和微信开发者工具 &#xff08;都是傻瓜式安装&#xff09;&#xff0c;然后注册小程序账号&#xff1a; 拿到appid&#xff1a; ②简单通过demo使用微信开发者工具和…...

【ES】--Elasticsearch的分词器深度研究

目录 一、问题描述及分析二、analyze分析器原理三、 multi-fields字段支持多场景搜索(如同时简繁体、拼音等)1、ts_match_analyzer配置分词2、ts_match_all_analyzer配置分词3、ts_match_1_analyzer配置分词4、ts_match_2_analyzer配置分词5、ts_match_3_analyzer配置分词6、ts…...

【Langchain Agent研究】SalesGPT项目介绍(三)

【Langchain Agent研究】SalesGPT项目介绍&#xff08;二&#xff09;-CSDN博客 上节课&#xff0c;我们介绍了salesGPT项目的初步的整体结构&#xff0c;poetry脚手架工具和里面的run.py。在run.py这个运行文件里&#xff0c;引用的最主要的类就是SalesGPT类&#xff0c;今天我…...

Java安全 URLDNS链分析

Java安全 URLDNS链分析 什么是URLDNS链URLDNS链分析调用链路HashMap类分析URL类分析 exp编写思路整理初步expexp改进最终exp 什么是URLDNS链 URLDNS链是Java安全中比较简单的一条利用链&#xff0c;无需使用任何第三方库&#xff0c;全依靠Java内置的一些类实现&#xff0c;但…...

【网站项目】026校园美食交流系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…...

使用raw.gitmirror.com替换raw.githubusercontent.com以解决brew upgrade python@3.12慢的问题

MacOS系统上&#xff0c;升级python3.12时&#xff0c;超级慢&#xff0c;而且最后还失败了。看了日志&#xff0c;发现是用curl从raw.githubusercontent.com上下载Python安装包超时了。 解决方案一&#xff1a;开启翻墙工具&#xff0c;穿越围墙 解决方案二&#xff1a;使用…...

深度学习的进展

#深度学习的进展# 深度学习的进展 深度学习是人工智能领域的一个重要分支&#xff0c;它利用神经网络模拟人类大脑的学习过程&#xff0c;通过大量数据训练模型&#xff0c;使其能够自动提取特征、识别模式、进行分类和预测等任务。近年来&#xff0c;深度学习在多个领域取得…...

[高性能] - 缓存架构

对于交易系统来说&#xff0c;低延时是核心业务的基本要求。因此需要对业务进行分级&#xff0c;还需要对数据按质量要求进行分类&#xff0c;主要包含两个维度&#xff1a;重要性&#xff0c;延时要求&#xff0c;数据质量。共包含以下三种场景&#xff1a; 1. 重要 延时性要…...

django实现外键

一&#xff1a;介绍 在Django中&#xff0c;外键是通过在模型字段中使用ForeignKey来实现的。ForeignKey字段用于表示一个模型与另一个模型之间的多对一关系。这通常用于关联主键字段&#xff0c;以便在一个模型中引用另一个模型的相关记录。 下面是一个简单的例子&#xff0…...

飞天使-k8s知识点14-kubernetes散装知识点3-Service与Ingress服务发现控制器

文章目录 Service与Ingress服务发现控制器存储、配置与角色 Service与Ingress服务发现控制器 在 Kubernetes 中&#xff0c;Service 和 Ingress 是两种不同的资源类型&#xff0c;它们都用于处理网络流量&#xff0c;但用途和工作方式有所不同。Service 是 Kubernetes 中的一个…...

任务调度

1.学习目标 1.1 定时任务概述 1.2 jdk实现任务调度 1.3 SpringTask实现任务调度 1.4 Spring-Task 分析 1.5 Cron表达式 https://cron.qqe2.com/ 2. Quartz 基本应用 2.1 Quartz 基本介绍 2.2 Quartz API介绍 2.3 入门案例 <dependency> <groupId>org.springframe…...

深刻反思现代化进程:20世纪与21世纪的比较分析及东西方思想家的贡献

深刻反思现代化进程&#xff1a;20世纪与21世纪的比较分析及东西方思想家的贡献 摘要&#xff1a;随着人类社会的快速发展&#xff0c;现代化已成为全球范围内的普遍追求。然而&#xff0c;20世纪至21世纪的现代化进程并非一帆风顺&#xff0c;它伴随着环境破坏、社会不平等和文…...

【FTP讲解】

FTP讲解 1. 介绍2. 工作原理3. 传输模式4. 安全5. 设置FTP服务器6. FTP命令 1. 介绍 FTP&#xff08;File Transfer Protocol&#xff09;是“文件传输协议”的英文缩写&#xff0c;它是用于在网络上进行数据传输的一种协议。FTP是因特网上使用最广泛的协议之一&#xff0c;它…...

java面试题整理

2023.2.14&#xff08;第二天&#xff09; 数组是不是对象&#xff1f; 在Java中&#xff0c;数组是对象。数组是一种引用类型&#xff0c;它可以存储固定大小的相同类型的元素序列。在Java中&#xff0c;数组是通过new关键字创建的&#xff0c;它们在内存中被分配为对象&…...

探索NLP中的N-grams:理解,应用与优化

简介 n-gram[1] 是文本文档中 n 个连续项目的集合&#xff0c;其中可能包括单词、数字、符号和标点符号。 N-gram 模型在许多与单词序列相关的文本分析应用中非常有用&#xff0c;例如情感分析、文本分类和文本生成。 N-gram 建模是用于将文本从非结构化格式转换为结构化格式的…...

JAVA-数组乱序

实现步骤 假设有一组数组numbers从数组中最后一个元素开始遍历设置一个随机数作为循环中遍历到的元素之前的所有元素的下标&#xff0c;即可从该元素之前的所有元素中随机取出一个每次将随机取出的元素与遍历到的元素交换&#xff0c;即可完成乱序 实例如下&#xff1a; im…...

Stable Diffusion 模型下载:majicMIX reverie 麦橘梦幻

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十...

Java开发四则运算-使用递归和解释器模式

使用递归和解释器模式 程序结构设计具体实现1. 先上最重要的实现类&#xff1a;ExpressionParser&#xff08;最重要&#xff09;2. 再上上下文测试代码&#xff1a;Context&#xff08;程序入口&#xff0c;稍重要&#xff09;3. 使用到的接口和数据结构&#xff08;不太重要的…...

[NSSCTF]-Web:[SWPUCTF 2021 新生赛]easyrce解析

先看网页 代码审计&#xff1a; error_reporting(0); &#xff1a;关闭报错&#xff0c;代码的错误将不会显示 highlight_file(__FILE__); &#xff1a;将当前文件的源代码显示出来 eval($_GET[url]); &#xff1a;将url的值作为php代码执行 解题&#xff1a; 题目既然允许…...

5.深入理解箭头函数 - JS

什么是箭头函数&#xff1f; 箭头函数是指通过箭头函数表达式创建的函数&#xff0c;是匿名函数。 箭头函数表达式的语法更简洁&#xff0c;但语义有差异&#xff0c;所以用法上也有一些限制。尽管如此&#xff0c;箭头函数依旧被广泛运用在需要执行“小函数”的场景。 箭头…...

高效的工作学习方法

1.康奈尔笔记法 在这里插入图片描述 2. 5W2H法 3. 鱼骨图分析法 4.麦肯锡7步分析法 5.使用TODOLIST 6.使用计划模板&#xff08;年月周&#xff09; 7. 高效的学习方法 成年人的学习特点&#xff1a; 快速了解一个领域方法 沉浸式学习方法&#xff1a; 沉浸学习的判据&am…...

【MySQL】-17 MySQL综合-3(MySQL创建数据库+MySQL查看数据库+MySQL修改数据库+MySQL删除数据库+MySQL选择数据库)

MySQL创建数据库查看数据库修改数据库删除数据库选择数据库 一 MySQL创建数据库实例1&#xff1a;最简单的创建 MySQL 数据库的语句实例2&#xff1a;创建 MySQL 数据库时指定字符集和校对规则 二 MySQL查看或显示数据库实例1&#xff1a;查看所有数据库实例2&#xff1a;创建并…...

【教学类-46-08】20240212立体鱼1.0

前期做了一个立体春字 作品展示 背景需求&#xff1a; 在南浔古镇的非遗文化馆里看到一个新年活动折纸——年年有鱼挂饰 我从网上搜索教程&#xff0c;完全可以用15*15的手工纸给孩子们做一套。 折纸教程 视频暂时不能查看https://haokan.baidu.com/v?pdwisenatural&vid1…...

【JVM篇】什么是jvm

文章目录 &#x1f354;什么是Java虚拟机&#x1f6f8;Java虚拟机有什么用&#x1f339;Java虚拟机的功能&#x1f388;Java虚拟机的组成 &#x1f354;什么是Java虚拟机 JVM指的是Java虚拟机&#xff0c;本质上是一个运行在计算机上的程序&#xff0c;可以运行 Java字节码文件…...

Vulnhub靶场 DC-9

目录 一、环境搭建 二、信息收集 1、主机发现 2、指纹识别 三、漏洞复现 1、dirsearch目录探测 2、sqlmap注入测试 3、文件包含漏洞 4、Knockd敲门服务 5、ssh爆破 ​​​​​​​6、提权 四、提取flag 一、环境搭建 Vulnhub靶机下载&#xff1a; 官网地址&#xff1a;https://…...

day2-理解 linux 云计算

1.解释服务器是什么&#xff1b; 服务器是一种高性能计算机&#xff0c;它的主要功能是提供计算服务和资源给其他计算机使用。在网络环境中&#xff0c;服务器扮演着重要的角色&#xff0c;它们可以存储和管理大量的数据&#xff0c;处理网络请求&#xff0c;提供应用程序运行…...

Android 13.0 开启禁用系统接收短信功能

1.概述 在13.0的系统rom定制化中,在一些wifi产品的机器中,对于系统4g部分的功能需要裁剪 比如拨打电话 接听电话 短信功能等这部分 需要禁用系统对应的功能,接下来就来初步分析下系统中接收短信部分功能,然后实现禁用接收短信功能 2.禁用和启用系统短信功能实现的核心类 …...

compile error ESP32cam.h no such file or directory

解决方法 可以参考这篇文章&#xff1a; But first, you will need to download the esp32cam.h library. For this go to Github and download the esp32cam Zip. GitHub - yoursunny/esp32cam: OV2640 camera on ESP32-CAM, Arduino library 具体就是下面的这篇重要的文章 …...

使用 Chainlit, Langchain 及 Elasticsearch 轻松实现对 PDF 文件的查询

在我之前的文章 “Elasticsearch&#xff1a;与多个 PDF 聊天 | LangChain Python 应用教程&#xff08;免费 LLMs 和嵌入&#xff09;” 里&#xff0c;我详述如何使用 Streamlit&#xff0c;Langchain, Elasticsearch 及 OpenAI 来针对 PDF 进行聊天。在今天的文章中&#xf…...

Gitee的使用教程(简单详细)

1.安装git&#xff08;我的电脑自带git&#xff0c;我没弄这步QAQ&#xff09; Git (git-scm.com)https://git-scm.com/ 安装好后在桌面点击鼠标右键会出现git GUI 和 git Bash&#xff08;没有的话点击显示更多选项&#xff09; 2.去gitee上注册一个账号 工作台 - Gitee.co…...

生成树(习题)

模板】最小生成树 生成树有两种方法&#xff0c;但是我只会克鲁斯卡尔算法&#xff0c;所以接下来下面的的题目都是按照这个算法来实现的&#xff0c;首先来见一下生么是这个算法&#xff0c;在之前的我写的一篇博客中有题使叫修复公路&#xff0c;其实这一题就是使用了这个算…...

ARMv8-AArch64 的异常处理模型详解之异常处理概述Handling exceptions

异常处理模型详解之异常处理概述 一&#xff0c;异常处理相关概念二&#xff0c;异常处理概述 一&#xff0c;异常处理相关概念 在介绍异常处理之前&#xff0c;有必要了解一些关于异常处理状态的术语&#xff1a; 当处理器响应一个异常时&#xff0c;我们称该异常被获取了&a…...

Ubuntu 18.04上安装cuDNN 8.9.6.50:一站式指南

Content 一、前言二、准备工作三、安装步骤1. 启用本地仓库2. 导入CUDA GPG密钥3. 更新仓库元数据4. 安装运行时库5. 安装开发者库6. 安装代码示例7. 另外一种安装办法 四、验证安装1. 验证cuDNN版本2. 测试示例代码 五、总结 一、前言 在深度学习领域&#xff0c;高效的计算资…...

Microsoft Word 超链接

Microsoft Word 超链接 1. 取消超链接2. 自动超链接2.1. 选项2.2. 校对 -> 自动更正选项2.3. Internet 及网络路径替换为超链接 References 1. 取消超链接 Ctrl A -> Ctrl Shift F9 2. 自动超链接 2.1. 选项 2.2. 校对 -> 自动更正选项 ​​​ 2.3. Internet…...

SparkJDBC读写数据库实战

默认的操作 代码val df = spark.read.format("jdbc").option("url", "jdbc:postgresql://localhost:5432/testdb").option("user", "username").option("password", "password").option("driver&q…...

代码随想录 -- 数组

文章目录 二分查找题目描述题解 移除元素题目描述题解&#xff1a;暴力解法题解&#xff1a;双指针法 有序数组的平方题目描述题解&#xff1a;暴力解法题解&#xff1a;双指针法 长度最小的子数组题目描述题解&#xff1a;暴力解法题解&#xff1a;滑动窗口&#xff08;双指针…...

【国产MCU】-CH32V307-基本定时器(BCTM)

基本定时器(BCTM) 文章目录 基本定时器(BCTM)1、基本定时器(BCTM)介绍2、基本定时器驱动API介绍3、基本定时器使用实例CH32V307的基本定时器模块包含一个16 位可自动重装的定时器(TIM6和TIM7),用于计数和在更新新事件产生中断或DMA 请求。 本文将详细介绍如何使用CH32…...

Node.js开发-fs模块

这里写目录标题 fs模块1) 文件写入2) 文件写入3) 文件移动与重命名4) 文件删除5) 文件夹操作6) 查看资源状态7) 相对路径问题8) __dirname fs模块 fs模块可以实现与硬盘的交互&#xff0c;例如文件的创建、删除、重命名、移动等&#xff0c;还有文件内容的写入、读取&#xff…...

探索Nginx:强大的开源Web服务器与反向代理

一、引言 随着互联网的飞速发展&#xff0c;Web服务器在现代技术架构中扮演着至关重要的角色。Nginx&#xff08;发音为“engine x”&#xff09;是一个高性能的HTTP和反向代理服务器&#xff0c;也是一个IMAP/POP3/SMTP代理服务器。Nginx因其卓越的性能、稳定性和灵活性&…...