目录


前言

        在学习过程中,又会有很多的点需要注意和深入了解,在此就专门做个番外篇知识碎片,随手可以记录知识点,巩固细节

一、UTF-8编码

        在学习rust的过程中,在工作过程中也会涉及到编码类型问题,这个在之前学习编程语言中并没有去注意,这次就好好整理学习一下

1.原理

UTF-8是一种变长编码格式,采用1-4个字节为字符进行编码:

  • ASCII字符(0-127)使用1个字节

  • 大部分汉字采用3个字节编码

  • 少量不常用汉字采用4个字节编码

2. 编码特性

UTF-8的核心设计目标是在兼容性效率之间取得平衡

关于编码特性,可以参考:编码格式:UTF-8(8-bit Unicode Transformation Format)_utf-8编码-CSDN博客

编码的区别:字符编码的概念(UTF-8、UTF-16、UTF-32都是什么鬼)-CSDN博客

3. 应用

UTF-8因其卓越的特性,已成为互联网和计算机系统中最广泛使用的字符编码标准:

  1. 互联网 (WWW):

    • HTML: <meta charset="UTF-8"> 是HTML5的标准声明,确保网页能正确显示各种语言的字符。

    • XML: 默认编码也是UTF-8。

    • JSON: 通常使用UTF-8编码传输文本数据。

    • URL: 虽然URL本身有特定编码规则,但其中的非ASCII字符通常建议先转换为UTF-8字节序列再进行百分号编码(Percent-encoding)。

    • 电子邮件: 现代邮件协议(如SMTP)支持使用UTF-8传输邮件头和正文,以支持国际化邮件地址和内容。

  2. 操作系统:

    • Unix/Linux/macOS: 系统内部和终端环境普遍使用UTF-8。

    • Windows: 虽然内部使用UTF-16,但其支持的文件系统和许多应用程序(如记事本、浏览器)都完全支持读写UTF-8编码的文件。

  3. 文件存储:

    • 文本文件: 是存储包含多语言文本文件的理想选择。.txt, .csv, .json, .xml 等文件常采用UTF-8编码。

    • 源代码: 现代编程语言(如Python 3+, Java, Go, Rust等)的源文件通常默认或推荐使用UTF-8编码,以便在代码中直接使用各种语言的标识符、字符串和注释。

  4. 数据库:

    • 现代数据库系统(如MySQL, PostgreSQL, SQLite, MongoDB)都支持使用UTF-8(或其变体,如MySQL的utf8mb4)存储文本数据,以容纳全球字符集。

  5. 软件开发和API:

    • 跨平台应用程序和库优先使用UTF-8进行字符串处理和通信,以保证一致性和兼容性。

    • 网络API(如RESTful API)通常使用UTF-8编码的JSON或XML作为数据交换格式。

二、案例

1.编译案例

案例1:

let mut chars = expression.chars().peekable();

1. expression.chars()

  • 作用:获取字符串的字符迭代器。

  • 解释:在 Rust 中,字符串默认不是按字符索引的(因为 UTF-8 编码的原因),直接通过下标访问可能不安全或效率低。.chars() 方法返回一个迭代器,让我们可以按顺序逐个访问字符串中的字符(char

案例2:

let chars: Vec<char> = input_str.chars().collect();

2.input_str .chars()

  • 作用:获取字符串的字符迭代器。

  • input_str 是我们要处理的字符串。

  • chars() 是字符串的一个方法。在 Rust 中,字符串默认不支持像数组那样直接通过下标(如 input_str[0])访问单个字符,因为 Rust 的字符串是 UTF-8 编码的,有些字符可能占用多个字节。

  • 调用 .chars() 会返回一个“迭代器”,它就像一个传送带,把字符串里的字符一个接一个地排队拿出来。

3.for cmd in cmds.chars()

let cmds = String::from("GLR");

for cmd in cmds.chars() {
    // 这里是循环体
}

总结

在面对String类型的时候,要用.chars(),for循环里面也需要这样转换才行

在不断学习中进行更新……

更多推荐