C# System.String support UTF-32 just fine, but you can't iterate through the string like it is an array of System.Char or use IEnumerable.
for example:
// 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;
}
}
Note the subtle difference in the Char.IsDigit and Char.IsLetter calls. And that String.Length is always the number of 16-bit "characters", not the number of "characters" in the UTF-32 sense.
Off topic, but UTF-32 support is completely unnecessary for an application to handle international languages, unless you have a specific business case for an obscure historical/technical language.