如何可靠地确定C#中字符的宽度?

如何可靠地确定C#中字符的宽度?,c#,unicode,fonts,width,fixed-width,C#,Unicode,Fonts,Width,Fixed Width,我正在编写一个C#程序,并使用固定宽度的字体显示所有内容。在此字体下,每个Unicode字符占用1个字符宽度或2个字符宽度。在程序中,有一个功能需要确定一个特定字符占用1个字符宽度或2个字符宽度。首先,我使用regex[^\x00-\xFF]来解决这个问题。如果一个字符与之匹配,它将占用1个字符的宽度,否则它将占用2个字符的宽度。但后来我发现这是不正确的。例如,这些字符┌─┬┐│├┼┤┴┘不在[^\x00-\xFF]的范围内,但它们都只占用1个字符的宽度。我想知道在C#中,当使用固定宽度字体时,

我正在编写一个C#程序,并使用固定宽度的字体显示所有内容。在此字体下,每个Unicode字符占用1个字符宽度或2个字符宽度。在程序中,有一个功能需要确定一个特定字符占用1个字符宽度或2个字符宽度。首先,我使用regex
[^\x00-\xFF]
来解决这个问题。如果一个字符与之匹配,它将占用1个字符的宽度,否则它将占用2个字符的宽度。但后来我发现这是不正确的。例如,这些字符
┌─┬┐│├┼┤┴┘
不在
[^\x00-\xFF]
的范围内,但它们都只占用1个字符的宽度。我想知道在C#中,当使用固定宽度字体时,如何确定一个特定字符占用1个字符宽度或2个字符宽度?

根据.NET文档,如果您知道使用的字体1,您可以使用字体的to

您仍然必须使用字体中的字形索引映射字符。你可以用它来做

var字符='x';
GlyphTypeface GlyphTypeface=新的GlyphTypeface(新Uri(“file:///C:\\WINDOWS\\Fonts\\Kooten.ttf”);
变量索引=glyphTypeface.CharacterToGlyphMap[字符];
变量宽度=字形字体。进阶宽度[索引];
[1] 要获取当前控制台的字体详细信息,我建议阅读以下问题:


相关问题:

有许多unicode标志符号占用0空间。例如,Unicode中有一个块,它由叠加到上一个glyph的glyph组成。另一方面,许多unicode标志符号由两个C#
char
组成(所有非BMP标志符号,代码>0xFFFF的标志符号)。遗憾的是,.NET中的Regex不支持Unicodehave的非BMP部分。您是否考虑过渲染字符并使用或测量结果?@timur我正在编写的应用程序是一个控制台应用程序。渲染它然后测量文本太重了。