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

时间:2009-05-20 11:22:45

标签: c#

我希望能够在C#中获取所有可打印字符的字符数组,是否有人知道如何执行此操作?

修改

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

5 个答案:

答案 0 :(得分:27)

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

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

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

答案 1 :(得分:20)

这是Fredrik解决方案的LINQ版本。请注意,Enumerable.Range会产生IEnumerable<int>,因此您必须先转换为字符。我相信Cast<char>会在3.5SP0中发挥作用,但从3.5SP1开始,您必须进行“正确”的转换:

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

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

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

答案 2 :(得分:4)

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

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

答案 3 :(得分:0)

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

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

请参阅此ASCII table

答案 4 :(得分:0)

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