Я бы хотел получить массив char всех печатаемых символов на С#, кто-нибудь знает, как это сделать?
изменить
Под печатью я имею в виду видимые европейские символы, поэтому да, умлауты, тильды, акценты и т.д.
Я бы хотел получить массив char всех печатаемых символов на С#, кто-нибудь знает, как это сделать?
изменить
Под печатью я имею в виду видимые европейские символы, поэтому да, умлауты, тильды, акценты и т.д.
Это даст вам список со всеми символами, которые не считаются управляющими символами:
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, чтобы найти комбинацию, которая соответствует вашим требованиям.
Здесь версия 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
на самом деле не позволяет вам представлять все: (
Решение LINQ (основано на Fredrik Mörk's):
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';
}