Подтвердить что ты не робот

Как получить список всех печатаемых символов в С#?

Я бы хотел получить массив char всех печатаемых символов на С#, кто-нибудь знает, как это сделать?

изменить

Под печатью я имею в виду видимые европейские символы, поэтому да, умлауты, тильды, акценты и т.д.

4b9b3361

Ответ 1

Это даст вам список со всеми символами, которые не считаются управляющими символами:

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, чтобы найти комбинацию, которая соответствует вашим требованиям.

Ответ 2

Здесь версия LINQ решения Fredrik. Обратите внимание, что 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();

Я создал результат как массив, как тот, который задал вопрос, но это не обязательно лучшая идея. Это зависит от варианта использования.

Обратите внимание, что это также не учитывает полные символы Юникода, только те, которые находятся в базовой многоязычной плоскости. Я не знаю, что он возвращает для высоких/низких суррогатов, но стоит хотя бы знать, что один char на самом деле не позволяет вам представлять все: (

Ответ 3

Решение LINQ (основано на Fredrik Mörk's):

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

Ответ 4

Я знаю, что ASCII специально не запрашивался, но это быстрый способ получить список всех печатных символов ASCII.

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

Смотрите таблицу ASCII.

Ответ 5

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