The usual way of removing diatrics doesn’t work in windows phone. So what you need to do is manually replace what you need to replace.
Here’s what i tend to do.
Note: It only replaces lowercase replacement (as that was what i needed )so keep that in mind… however nothing is stopping you from extending it.
public class StringUtil
{
static char[] englishReplace = { 'e' };
static char[] englishAccents = { 'é' };
static char[] frenchReplace = { 'a', 'a', 'a', 'a', 'c', 'e', 'e', 'e', 'e', 'i', 'i', 'o', 'o', 'u', 'u', 'u' };
static char[] frenchAccents = { 'à', 'â', 'ä', 'æ', 'ç', 'é', 'è', 'ê', 'ë', 'î', 'ï', 'ô', 'œ', 'ù', 'û', 'ü' };
static char[] germanReplace = { 'a', 'o', 'u', 's' };
static char[] germanAccents = { 'ä', 'ö', 'ü', 'ß' };
static char[] spanishReplace = { 'a', 'e', 'i', 'o', 'u' };
static char[] spanishAccents = { 'á', 'é', 'í', 'ó', 'ú' };
static char[] catalanReplace = { 'a', 'e', 'e', 'i', 'i', 'o', 'o', 'u', 'u' };
static char[] catalanAccents = { 'à', 'è', 'é', 'í', 'ï', 'ò', 'ó', 'ú', 'ü' };
static char[] italianReplace = { 'a', 'e', 'e', 'i', 'o', 'o', 'u' };
static char[] italianAccents = { 'à', 'è', 'é', 'ì', 'ò', 'ó', 'ù' };
static char[] polishReplace = { 'a', 'c', 'e', 'l', 'n', 'o', 's', 'z', 'z' };
static char[] polishAccents = { 'ą', 'ć', 'ę', 'ł', 'ń', 'ó', 'ś', 'ż', 'ź' };
static char[] hungarianReplace = { 'a', 'e', 'i', 'o', 'o', 'o', 'u', 'u', 'u' };
static char[] hungarianAccents = { 'á', 'é', 'í', 'ö', 'ó', 'ő', 'ü', 'ú', 'ű' };
static char[] portugueseReplace = { 'a', 'a', 'a', 'a', 'e', 'e', 'i', 'o', 'o', 'o', 'u', 'u' };
static char[] portugueseAccents = { 'ã', 'á', 'â', 'à', 'é', 'ê', 'í', 'õ', 'ó', 'ô', 'ú', 'ü' };
static char[] czechReplace = { 'a', 'a', 'a', 'c', 'd', 'e', 'e', 'i', 'n', 'o', 'r', 's', 't', 'u', 'u', 'y', 'z' };
static char[] czechAccents = { 'ã', 'á', 'á', 'č', 'ď', 'é', 'ě', 'í', 'ň', 'ó', 'ř', 'š', 'ť', 'ú', 'ů', 'ý', 'ž' };
static char[] dutchReplace = { 'e', 'e', 'i', 'o', 'o', 'u' };
static char[] dutchAccents = { 'é', 'ë', 'ï', 'ó', 'ö', 'ü' };
static char[] turkishReplace = { 'c', 'e', 'e', 'g', 'i', 'i', 'o', 'o', 'u' };
static char[] turkishAccents = { 'ç', 'é', 'ë', 'ğ', 'İ', 'ï', 'ó', 'ö', 'ü' };
static char[] romanianReplace = { 'a', 'a', 'i', 's', 's', 't', 't' };
static char[] romanianAccents = { 'ă', 'â', 'î', 'ş', 'ș', 'ţ', 'ț' };
static char[] filipinoReplace = { 'a', 'a', 'a', 'e', 'e', 'e', 'i', 'i', 'i', 'o', 'o', 'o', 'u', 'u', 'u' };
static char[] filipinoAccents = { 'á', 'à', 'â', 'é', 'è', 'ê', 'í', 'ì', 'î', 'ó', 'ò', 'ô', 'ú', 'ù', 'û' };
static char[] ukarainianReplace = { 'i', 'r' };
static char[] ukarainianAccents = { 'ї', 'ґ' };
static char[] russianReplace = { 'b' };
static char[] russianAccents = { 'ъ' };
static char[] greekReplace = { 'α', 'ε', 'η', 'ι', 'ι', 'ι', 'ο', 'υ', 'υ', 'υ', 'ω' };
static char[] greekAccents = { 'ά', 'έ', 'ή', 'ί', 'ϊ', 'ΐ', 'ό', 'ύ', 'ϋ', 'ΰ', 'ώ' };
static char[] arabicAccents = { 'أ', 'إ', 'آ', 'ء', 'پ', 'ض', 'ذ', 'ـ', 'خ', 'خ', 'غ', 'ش', 'ة', 'ث', 'ً', 'ٰ', 'ؤ', 'ظ', 'ى', 'ئ' };
static char[] arabicReplace = { 'ا', 'ا', 'ا', 'ا', 'ب', 'ص', 'د', 'ّ', 'ح', 'ك', 'ع', 'س', 'ت', 'ت', 'َ', 'َ', 'و', 'ط', 'ي', 'ي' };
static char[] bulgarianReplace = { 'ь', 'и' };
static char[] bulgarianAccents = { 'ъ', 'ѝ' };
static char[] croatianReplace = { 'c','c','d','s','z' };
static char[] croatianAccents = { 'č','ć','đ','š','ž' };
static char[] estonianReplace = { 'a', 'o', 'o', 'u' };
static char[] estonianAccents = { 'ä', 'ö', 'õ', 'ü' };
static char[] icelandicReplace = { 'o' };
static char[] icelandicAccents = { 'ö' };
static char[] latvianReplace = { 'e' };
static char[] latvianAccents = { 'ē' };
static char[] slovakianReplace = { 'a', 'a', 'c', 'd', 'e', 'i', 'l', 'l', 'n', 'o', 'o', 'r', 's', 't', 'u', 'y', 'z' };
static char[] slovakianAccents = { 'á', 'ä', 'č', 'ď', 'é', 'í', 'ĺ', 'ľ', 'ň', 'ó', 'ô', 'ŕ', 'š', 'ť', 'ú', 'ý', 'ž' };
public enum DictionaryDef
{
NotSet,
Arabic,
Bulgarian,
Catalan,
ChineseSimplified,
ChineseTraditional,
Croatian,
Czech,
CzechAlt,
Danish,
Dutch,
DutchBelgium,
English,
Estonian,
Finnish,
French,
CanadianFrench,
SwissFrench,
German,
Greek,
Hebrew,
Hungarian,
Icelandic,
Italian,
Latvian,
//Macedonian,
Norwegian,
Polish,
Portuguese,
BrazilianPortuguese,
Romanian,
Russian,
Spanish,
Slovak,
SlovakAlt,
Slovenian,
Swedish,
Turkish,
Ukrainian
}
static StringBuilder sbStripAccents = new StringBuilder();
public static string RemoveDiacritics(string accentedStr, Config.DictionaryDef eDictionary)
{
char[] replacement = null;
char[] accents = null;
switch (eDictionary)
{
case DictionaryDef.Arabic:
replacement = arabicReplace;
accents = arabicAccents;
break;
case DictionaryDef.Slovak:
case Config.DictionaryDef.SlovakAlt:
replacement = slovakianReplace;
accents = slovakianAccents;
break;
case DictionaryDef.Latvian:
replacement = latvianReplace;
accents = latvianAccents;
break;
case DictionaryDef.Icelandic:
replacement = icelandicReplace;
accents = icelandicAccents;
break;
case DictionaryDef.Estonian:
replacement = estonianReplace;
accents = estonianAccents;
break;
case DictionaryDef.Bulgarian:
replacement = bulgarianReplace;
accents = bulgarianAccents;
break;
case DictionaryDef.Romanian:
replacement = romanianReplace;
accents = romanianAccents;
break;
case DictionaryDef.Croatian:
case DictionaryDef.Slovenian:
replacement = croatianReplace;
accents = croatianAccents;
break;
case DictionaryDef.English:
replacement = englishReplace;
accents = englishAccents;
break;
case DictionaryDef.French:
case DictionaryDef.CanadianFrench:
case DictionaryDef.SwissFrench:
replacement = frenchReplace;
accents = frenchAccents;
break;
case DictionaryDef.German:
replacement = germanReplace;
accents = germanAccents;
break;
case DictionaryDef.Spanish:
replacement = spanishReplace;
accents = spanishAccents;
break;
case DictionaryDef.Catalan:
replacement = catalanReplace;
accents = catalanAccents;
break;
case DictionaryDef.Italian:
replacement = italianReplace;
accents = italianAccents;
break;
case DictionaryDef.Polish:
replacement = polishReplace;
accents = polishAccents;
break;
case DictionaryDef.Hungarian:
replacement = hungarianReplace;
accents = hungarianAccents;
break;
case DictionaryDef.Portuguese:
case DictionaryDef.BrazilianPortuguese:
replacement = portugueseReplace;
accents = portugueseAccents;
break;
case DictionaryDef.Czech:
case DictionaryDef.CzechAlt:
replacement = czechReplace;
accents = czechAccents;
break;
case DictionaryDef.Dutch:
replacement = dutchReplace;
accents = dutchAccents;
break;
case DictionaryDef.Turkish:
replacement = turkishReplace;
accents = turkishAccents;
break;
case DictionaryDef.Russian:
replacement = russianReplace;
accents = russianAccents;
break;
case DictionaryDef.Ukrainian:
replacement = ukarainianReplace;
accents = ukarainianAccents;
break;
case DictionaryDef.Greek:
replacement = greekReplace;
accents = greekAccents;
break;
default:
return accentedStr;
}
if (accents != null && replacement != null && accentedStr.IndexOfAny(accents) > -1)
{
sbStripAccents.Length = 0;
sbStripAccents.Append(accentedStr);
for (int i = 0; i < accents.Length; i++)
{
sbStripAccents.Replace(accents[i], replacement[i]);
}
return sbStripAccents.ToString();
}
else
return accentedStr;
}
}