【发布时间】:2023-03-31 12:15:01
【问题描述】:
我正在编写一个 C# 程序,并使用固定宽度的字体来显示所有内容。在这种字体下,每个 Unicode 字符要么占据 1 个字符宽度,要么占据 2 个字符宽度。在程序中,有一个特性需要判断一个特定的字符占据1个字符宽度还是2个字符宽度。起初我使用正则表达式[^\x00-\xFF] 来解决问题。如果一个字符匹配它,它占用 1 个字符宽度,否则它是 2 个字符宽度。但后来我发现这是不对的。例如,这些字符┌─┬┐│├┼┤┴┘ 不在[^\x00-\xFF] 的范围内,但它们都只占用1 个字符宽度。我想知道在C#中使用固定宽度字体时如何确定特定字符占用1个字符宽度或2个字符宽度?
【问题讨论】:
-
有很多占用0空间的unicode字形。例如,Unicode 中有it.wikipedia.org/wiki/Combining_Diacritical_Marks 块,它由叠加到前一个字形上的字形组成。作为另一个旁注,许多 unicode 字形由两个 C#
char组成(所有非 BMP 字形,代码 > 0xFFFF 的字形)。遗憾的是 .NET 中的Regex不支持 Unicode 的非 BMP 部分 -
您是否考虑过使用
Graphics.MeasureString或TextRenderer.MeasureText渲染字符并测量结果? -
@timur 我正在编写的应用程序是一个控制台应用程序。渲染它然后测量文本太重了。
标签: c# unicode fonts width fixed-width