• 聊聊C# 13中的新转义字符 \e
  • 发布于 1个月前
  • 70 热度
    0 评论
前言
C# 13 引入了一个新的转义字符 \e,代替 \u001b 来简化 Esc/Escape 的转义,我们可以使用它来简化 Console 里的一些输出格式控制。

例子
ANSI Console 的一些介绍的知识:https://gist.github.com/fnky/458719343aabd01cfb17a3a4f7296797
以下介绍来自 chatgpt:ANSI Console 是指支持ANSI(美国国家标准协会)转义码的命令行界面。这些转义码是一系列字符序列,用于控制文本格式、颜色和其他输出选项。

ANSI控制台的主要特点:
文本格式化:ANSI代码可以改变文本属性,比如让文本变为粗体、下划线或闪烁。
颜色控制:它们可以改变文本的前景色和背景色,使输出更加美观。
光标控制:ANSI转义码可以用于移动光标、清除屏幕的部分内容,或创建更复杂的布局。
兼容性:许多现代终端和命令行界面,包括macOS的终端、Windows的命令提示符和PowerShell(经过一些配置后),以及各种Linux终端,均支持ANSI转义码。

使用示例:
改变文本颜色:
echo -e "\033[31m这段文字是红色的!\033[0m"
在这个例子中,\033[31m将文本颜色设置为红色,而\033[0m则重置为默认颜色。

应用场景:
脚本编写:开发者常在脚本中使用ANSI代码来增强用户体验。
终端应用:许多命令行工具和应用程序利用ANSI代码来改善输出格式。
游戏:文本游戏可能使用这些代码来创建引人入胜的用户界面。
总的来说,ANSI 代码增强了控制台应用的功能和美观,使其更加用户友好和视觉吸引。

这里是一个示例,使用了 ANSI console 的控制语法来指定输出文本的样式,这里指定了使用红色的前景色,也就是字体是红色,可以看到输出结果是红色的文字。第一个 Console.WriteLine 使用的是 \u001b,第二个 Console.WriteLine 使用的是新引入的 \e ,他们的效果是一样的:
[ 是一个控制符,后面跟着的是参数,31m 表示设置前景色为红色,后面的 0m 代表重置所有的样式。

所以在最后的 Console.WriteLine("Hello .NET") 输出的结果颜色是默认的颜色。我们再看下编译的时候编译器会怎么处理,我们可以直接借助 sharplab 来看

可以看到编译之后 \e 其实直接转换成了 \u001b,编译器帮我们做了转换,用到的地方可以简化一些可以更简单一点。

参考资料
https://gist.github.com/fnky/458719343aabd01cfb17a3a4f7296797
https://github.com/spectreconsole/spectre.console
https://github.com/WeihanLi/SamplesInPractice/blob/main/net9sample/CSharp13Samples/EscapeCharSample.cs
https://github.com/dotnet/csharplang/blob/main/proposals/csharp-13.0/esc-escape-sequence.md
用户评论