You use "icu::BreakIterator::createCharacterInstance" from the ICU library to get a character-walker. In .NET, you have "StringInfo.GetTextElementEnumerator". You must use a Unicode library to walk "grapheme clusters" (what users recognize as individual characters). There's no other way to do it correctly.