C # System.String прекрасно поддерживает UTF-32, но вы не можете перебирать строку, как будто это массив System.Char или использовать IEnumerable.
например:
// iterating through a string NO UTF-32 SUPPORT
for (int i = 0; i < sample.Length; ++i)
{
if (Char.IsDigit(sample[i]))
{
Console.WriteLine("IsDigit");
}
else if (Char.IsLetter(sample[i]))
{
Console.WriteLine("IsLetter");
}
}
// iterating through a string WITH UTF-32 SUPPORT
for (int i = 0; i < sample.Length; ++i)
{
if (Char.IsDigit(sample, i))
{
Console.WriteLine("IsDigit");
}
else if (Char.IsLetter(sample, i))
{
Console.WriteLine("IsLetter");
}
if (Char.IsSurrogate(sample, i))
{
++i;
}
}
Обратите внимание на тонкую разницу в вызовах Char.IsDigit и Char.IsLetter. И это String.Length - это всегда число 16-битных «символов», а не количество «символов» в смысле UTF-32.
Не по теме, но поддержка UTF-32 совершенно не нужна для приложения, работающего с международными языками, если только у вас нет конкретного бизнес-кейса для неясного исторического / технического языка.