可能的疑问
Query :为什么会将escape这个单词翻译为“转义”。或许与本身“逃跑”的这个含义相差过远
Answer :
在计算机编程和文本处理中,“escape"的含义是"脱离常规解释或处理”,表示某些字符需要被特殊对待。这种特殊对待就是通过在字符前加上反斜杠"“来实现的。因此,这个过程被称为"转义”。
尽管"转义"与"escape"的字面意思"逃跑"有所差异,但它在计算机领域凸显了"脱离常规解释或处理"这一特点,从而成为了一个约定俗成的翻译。

以下是一些常见的特殊字符和转义序列:

  1. \字符 - 转义字符(Escape Character):

    • \字符用于创建转义序列,表示特殊字符或控制字符。
    • 常见的转义序列包括:
      • \\ - 表示反斜杠字符本身。
      • \" - 表示双引号字符。
      • \' - 表示单引号字符。
      • \n - 表示换行符。
      • \r - 表示回车符。
      • \t - 表示制表符。
      • \uXXXX - 表示指定的Unicode字符,其中XXXX是四位十六进制数。
        在C#中,$@都是特殊字符,用于字符串的不同功能。
  2. $字符 - 字符串插值(String Interpolation):

    • $字符用于创建插值字符串,允许在字符串中嵌入表达式和变量。
    • 在字符串前面加上$符号,然后在字符串中使用{}大括号来引用变量或表达式。
    • 在大括号内,可以直接引用变量名,或者包含更复杂的表达式。
    • 字符串插值提供了一种方便、可读性强的方式来构建动态字符串。
      示例:
    string name = "John";
    int age = 25;
    string message = $"My name is {name} and I am {age} years old.";
    Console.WriteLine(message);
    // 输出: "My name is John and I am 25 years old."
    
  3. @字符 - 逐字字符串(Verbatim String):

    • @字符用于创建逐字字符串,也称为原始字符串。
    • 在字符串前面加上@符号,可以告诉编译器将字符串按原样处理,忽略转义字符的特殊含义。
    • 在逐字字符串中,可以直接使用换行符、制表符等特殊字符,而不需要使用转义字符。
    • 逐字字符串对于包含大量特殊字符或文件路径的字符串非常有用。
      示例:
    string path = @"C:\Users\John\Documents\file.txt";
    string multiline = @"First line
    Second line
    Third line";
    Console.WriteLine(path);
    Console.WriteLine(multiline);
    // 输出:
    // "C:\Users\John\Documents\file.txt"
    // "First line
    //  Second line
    //  Third line"
    

这两个特殊字符可以组合使用,创建插值逐字字符串:

string name = "John";
string message = $@"Hello, {name}!
Welcome to C#.";
Console.WriteLine(message);
// 输出:
// "Hello, John!
//  Welcome to C#."

在插值逐字字符串中,可以享受字符串插值的便利,同时保留字符串的原始格式。

理解$@字符的作用,可以帮助你更高效、更灵活地处理字符串,提高代码的可读性和可维护性。

  1. {}大括号 - 字符串插值中的表达式:

    • 在字符串插值中,可以使用{}大括号来包含表达式或条件语句。
      示例:
    int value = 42;
    string message = $"The value is {(value > 0 ? "positive" : "negative")}.";
    Console.WriteLine(message);
    // 输出: "The value is positive."
    
  2. []方括号 - 字符串中的索引器:

    • 可以使用[]方括号来访问字符串中的单个字符。
      示例:
    string text = "Hello, World!";
    char firstChar = text[0];
    Console.WriteLine(firstChar);
    // 输出: 'H'
    

这些特殊字符和转义序列提供了更多的灵活性和控制力,用于处理字符串中的特殊字符、格式化字符串以及访问字符串的特定部分。

Escape character(转义字符)是一种特殊字符,用于表示某些特殊的含义或功能,而不是字符本身的字面意思。转义字符通常由反斜杠 \ 后跟一个或多个字符组成。

以下是一些常见的转义字符及其示例:

  1. \n - Newline (换行符)
    示例: Console.WriteLine("Hello\nWorld");
    输出:

    Hello
    World
    
  2. \t - Tab (制表符)
    示例: Console.WriteLine("Name:\tJohn");
    输出: Name: John

  3. \\ - 反斜杠
    示例: Console.WriteLine("C:\\Users\\John\\Documents");
    输出: C:\Users\John\Documents

  4. \" - 双引号
    示例: Console.WriteLine("He said, \"Hello!\"");
    输出: He said, "Hello!"

  5. \' - 单引号
    示例: Console.WriteLine('It\'s a beautiful day.');
    输出: It's a beautiful day.

  6. \b - Backspace (退格符)
    示例: Console.WriteLine("Hello\b\b\b");
    输出: He

  7. \r - Carriage Return (回车符)
    示例: Console.WriteLine("Hello\rWorld");
    输出: World

  8. \u - Unicode Escape (Unicode 转义序列)
    示例: Console.WriteLine("\u03A9");
    输出: Ω

  9. \x - Hexadecimal Escape (十六进制转义序列)
    示例: Console.WriteLine("\x48\x65\x6C\x6C\x6F");
    输出: Hello

在字符串中使用转义字符可以表示一些特殊字符,如引号、换行符、制表符等,或者表示一些无法直接输入的字符,如 Unicode 字符。

转义字符在处理文件路径、格式化字符串、输出特殊字符等场景中非常有用。转义字符可以正确表示和操作字符串。

Unicode 是一种国际标准字符编码系统,为世界上大多数书写系统中的字符分配唯一的数字编码。UTF (Unicode
Transformation Format) 是 Unicode 标准定义的一种编码方式,用于在计算机系统中表示 Unicode 字符。

以下是几种常见的 UTF 编码规则及其区别:

  1. UTF-8:

    • UTF-8 是一种可变长度的编码方式,使用 1 到 4 个字节来表示 Unicode 字符。
    • 对于 ASCII 字符 (0-127),UTF-8 使用单个字节进行编码,与 ASCII 编码兼容。
    • 对于非 ASCII 字符,UTF-8 使用 2 到 4 个字节进行编码,根据字符的 Unicode 码点范围不同而异。
    • UTF-8 是互联网和许多操作系统中最常用的 Unicode 编码方式。
    • 网页:大多数网页使用 UTF-8 编码,以确保在不同设备和浏览器上正确显示各种语言的文本。
      示例:
      <meta charset="UTF-8">
      
    • 文本文件:许多文本编辑器和操作系统默认使用 UTF-8 编码来保存文本文件,以支持多语言字符。
      示例:
      # 在 UTF-8 编码的文本文件中
      こんにちは世界 (日语:"你好,世界")
      Привет, мир (俄语:"你好,世界")
      
  2. UTF-16:

    • UTF-16 是一种固定长度的编码方式,使用 2 个字节 (16 位) 来表示大多数 Unicode 字符。
    • 对于 BMP (Basic Multilingual Plane,基本多文种平面) 中的字符 (U+0000 到 U+FFFF),UTF-16 使用 2 个字节进行编码。
    • 对于 BMP 之外的字符 (U+10000 及以上),UTF-16 使用 4 个字节 (两个 16 位代理对) 进行编码。
    • UTF-16 在 Windows 操作系统和一些编程语言 (如 Java、C#) 中广泛使用。
    • Windows 操作系统:Windows 使用 UTF-16 作为其内部字符编码,用于存储和处理文本。
      示例:
      // C# 中的字符串默认使用 UTF-16 编码
      string text = "Hello, 世界!";
      
    • Java 编程语言:Java 使用 UTF-16 作为其内部字符编码,字符串和字符类型都基于 UTF-16。
      示例:
      // Java 中的字符串默认使用 UTF-16 编码
      String text = "こんにちは, world!";
      
  3. UTF-32:

    • UTF-32 是一种固定长度的编码方式,使用 4 个字节 (32 位) 来表示所有 Unicode 字符。
    • UTF-32 为每个 Unicode 字符分配一个固定的 32 位值,因此可以直接访问任何 Unicode 字符。
    • UTF-32 的优点是简单直接,但缺点是占用更多的存储空间。
    • UTF-32 在某些特定领域 (如数据库索引) 中使用,但在一般情况下并不常见。
    • 数据库索引:某些数据库系统使用 UTF-32 来存储字符串索引,以便快速查找和比较字符。
      示例:
      -- 在数据库中使用 UTF-32 编码的列
      CREATE TABLE users (
        id INT PRIMARY KEY,
        name VARCHAR(255) CHARACTER SET utf32
      );
      
    • 字符串处理算法:一些字符串处理算法可能使用 UTF-32 编码,以简化字符的访问和操作。
      示例:
      # Python 中使用 UTF-32 编码处理字符串
      text = "Hello, Привет!"
      encoded_text = text.encode("utf-32")
      ```选择使用哪种 UTF 编码方式取决于具体的应用场景、兼容性要求和性能考虑。UTF-8 在网络传输和存储方面更加高效,而 UTF-16 在某些编程语言和操作系统中被广泛使用。UTF-32 虽然简单直接,但由于占用更多存储空间,使用较少。
      
      

在处理 Unicode 字符时,了解不同的 UTF 编码方式及其特点非常重要,这样可以确保在不同系统和环境之间正确地传输和存储
Unicode 文本。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐