public static System.Collections.Generic.List<string> GraphemeClusters(string s){
System.Collections.Generic.List<string> ls = new System.Collections.Generic.List<string>();
System.Globalization.TextElementEnumerator enumerator = System.Globalization.StringInfo.GetTextElementEnumerator(s);
while(enumerator.MoveNext()){
ls.Add((string)enumerator.Current);
public static string ReplaceGraphemeClusters(string s, string oldValue, string newValue){
if(string.IsNullOrEmpty(s) || s.Length == 1){
System.Collections.Generic.List<string> ls = GraphemeClusters(s);
ls = ls.Select(r => r.Replace(oldValue, newValue)).ToList();
return string.Join("", ls.ToArray());
public static void Main()
string s ="Mai Hung - Mai Hung Mise\u0301rables";
string r = ReplaceGraphemeClusters(s, "é", "e");
System.Console.WriteLine(s);
System.Console.WriteLine(r);