如何获取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'; }