Console.ReadLine returns 当输入由单个字符 U+2192 (ASCII: 1A) 组成时为空

Console.ReadLine returns null when input consists of the single char U+2192 (ASCII: 1A)

我正在使用面向 .NET 6.0.200 的 Rider 2022.1 EAP 7。

正在测试以下字符:

但具体输入 U+2192(ASCII 中的代码点 1A)到 Console.In 会使 Console.ReadLine() 返回 null

使用以下代码:

var upArrow = ((char)0x18).ToString();
var downArrow = ((char)0x19).ToString();
var rightArrow = ((char)0x1A).ToString();
var leftArrow = ((char)0x1B).ToString();

while (true)
{
    Console.Write("Input: ");
    string? input = Console.ReadLine();
    
    if (input == upArrow) Console.WriteLine("Up arrow");
    else if (input == downArrow) Console.WriteLine("Down arrow");
    else if (input == rightArrow) Console.WriteLine("Right arrow");
    else if (input == leftArrow) Console.WriteLine("Left arrow");
    else if (input is null) Console.WriteLine("Null");
}

输出如下,测试不同的箭头字符:

Input: ↑
Up arrow
Input: ↓
Down arrow
Input: ←
Left arrow
Input: →
Null

显然,我希望它打印“向右箭头”,但它是空的——我不知道为什么。

起初我以为这是由于字符编码问题,因为 Rider 的集成终端使用 Codepage 850 - 但这种编码(无论如何基本上都是 ASCII)在代码点 1A 处定义了右箭头。所以这并不是说这个角色不受支持。我的意思是,其他箭头都在。

感谢 Hans 在我的问题评论中解释了这个问题!

0x1A 映射到 Ctrl+Z 序列,这是 Windows 控制台中的 EOF 指示符。右箭头恰好映射到同一序列纯属巧合。