Char.IsControl 方法不将某些字符识别为控件



我注意到C#'Char.IsControl'方法无法将某些字符识别为控件。例如,以下代码为这两个值输出 false:

char pilcrow = 'u00B6';
char softHyphen = 'u00AD';
Console.Write("{0},{1}",char.IsControl(pilcrow), char.IsControl(softHyphen)); // -> 'false,false'

这是预期行为吗?我需要在我的代码中转义这些字符。

这些不是控制字符。一个是属于Punctuation, Other [Po]类别的 pilcrow 符号 ¶,另一个是软连字符,一种不可见的格式字符,会影响文本的连字符。

它们没有什么特别之处,实际上,您在Word中编写段落时可能会使用软连字符,并希望控制某些单词的连字。Word 使用 ¶ 作为段落标记 - 段落结尾的可视化。它不影响格式,这只是表示段落结尾的常用方法。在这方面,它与²,³,§,¶,¤,¦,°,±,1/2,¬(只需按住右Alt并按键)没有什么不同。

.NET 字符串使用 Unicode,因此无需对这些字符进行转义。您可以直接键入它们。

打印也没有问题 - 毕竟这些字符用于文档处理。软连字符控制 UI 或打印引擎在呈现到屏幕或纸张期间如何布局文本。

如果有人不希望打印这些字符,一个简单的string.Remove就可以完成这项工作。但是,删除连字符可能会影响文本的打印方式,长单词会移动到下一行。我在上一句中将该连字符添加到Removing以强制连字。没有它,Removing就会移动到下一行

最新更新