带有 Unicode 字符的 C# 控制台字符串填充

本文关键字:控制台 字符串 填充 Unicode 字符 带有 | 更新日期: 2023-09-27 18:31:03

我正在使用Console类来打印一些有时包含Unicode字符的结果。使用String.PadRight的传统填充方法无法正常工作,因为某些 Unicode 字符在字符串中占用一个字符,但在屏幕上占用两个字符。这是代码:

        Console.Out.WriteLine("123".PadRight(10, '-'));
        Console.Out.WriteLine("xxxxxx".PadRight(10, '-'));
        Console.Out.WriteLine("你好".PadRight(10, '-'));

在输出中,前两行在同一位置结束,而第三行长两个字符。代码页为:936 (ANSI/OEM - 简体中文 GBK)。

所以我想知道是否有办法在将字符串打印到控制台屏幕时获取字符串的实际宽度。谢谢!

带有 Unicode 字符的 C# 控制台字符串填充

您可以通过

检查当前光标位置在输出进行填充,如下所示:

private static void WriteConsolePadded(string value, int length, char padValue)
{
    Console.Write(value);
    if (Console.CursorLeft < length)
    {
        Console.Write(new string(padValue, length - Console.CursorLeft));
    }
    Console.WriteLine();
}

(显然,除了花更多的心思来更好地命名方法和参数)

然后你会有:

WriteConsolePadded("123",10, '-');
WriteConsolePadded("xxxxxx",10, '-');
WriteConsolePadded("你好",10, '-');

(其他变体也可能有意义,例如在输出之前测量起始位置,而不仅仅是假设它总是在最左侧的位置)