如何获取C#中所有可打印字符的列表?

我希望能够在C#中获取所有可打印字符的字符数组,有人知道如何做到这一点吗?

编辑:

可打印我的意思是可见的欧洲字符,所以是的,变音符号,波浪号,重音等。

这将为您提供一个列表,其中包含所有不被视为控制字符的字符:

List printableChars = new List(); for (int i = char.MinValue; i <= char.MaxValue; i++) { char c = Convert.ToChar(i); if (!char.IsControl(c)) { printableChars.Add(c); } } 

您可能需要调查其他Char.IsXxxx方法以找到适合您要求的组合。

这是Fredrik解决方案的LINQ版本。 请注意, Enumerable.Range生成IEnumerable因此您必须先转换为chars。 我相信Cast会在3.5SP0中运行,但从3.5SP1开始,你必须做一个“正确”的转换:

 var chars = Enumerable.Range(0, char.MaxValue+1) .Select(i => (char) i) .Where(c => !char.IsControl(c)) .ToArray(); 

我已经将结果创建为一个数组,因为这就是问题所要求的 – 尽管它不一定是最好的主意。 这取决于用例。

请注意,这也不考虑完整的Unicode字符,只考虑基本多语言平面中的字符。 我不知道它为高/低代理人返回什么,但至少知道单个char并不能真正让你代表所有东西是值得的:(

LINQ解决方案(基于FredrikMörk的):

 Enumerable.Range(char.MinValue, char.MaxValue).Select(c => (char)c).Where( c => !char.IsControl(c)).ToArray(); 

我知道ASCII没有特别要求,但这是获取所有可打印ASCII字符列表的快捷方法。

 for (Int32 i = 0x20; i <= 0x7e; i++) { printableChars.Add(Convert.ToChar(i)); } 

请参阅此ASCII表 。

 public bool IsPrintableASCII(char c) { return c >= '\x20' && c <= '\x7e'; }