Estoy usando un diccionario simple para reemplazar letras cirílicas con letras latinas y la mayoría de las veces funciona bien, pero tengo problemas cuando hay algunas letras latinas como entrada. La mayoría de las veces sus nombres de empresas.
Algunos ejemplos:
PROCRED se está convirtiendo en RROSRED
ОВЕХ como OVEH
CIUDAD como SITU
¿Qué puedo hacer sobre esto?
este es el diccionario que estoy usando
public string ConvertCyrillicToLatin(string text) { Dictionary<string, string> words = new Dictionary<string, string>(); words.Add("А", "A"); words.Add("Б", "B"); words.Add("В", "V"); words.Add("Г", "G"); words.Add("Д", "D"); words.Add("Ђ", "Đ"); words.Add("Е", "E"); words.Add("Ж", "Ž"); words.Add("З", "Z"); words.Add("И", "I"); words.Add("Ј", "J"); words.Add("К", "K"); words.Add("Л", "L"); words.Add("Љ", "Lj"); words.Add("М", "M"); words.Add("Н", "N"); words.Add("Њ", "Nj"); words.Add("О", "O"); words.Add("П", "P"); words.Add("Р", "R"); words.Add("С", "S"); words.Add("Т", "T"); words.Add("Ћ", "Ć"); words.Add("У", "U"); words.Add("Ф", "F"); words.Add("Х", "H"); words.Add("Ц", "C"); words.Add("Ч", "Č"); words.Add("Џ", "Dž"); words.Add("Ш", "Š"); words.Add("а", "a"); words.Add("б", "b"); words.Add("в", "v"); words.Add("г", "g"); words.Add("д", "d"); words.Add("ђ", "đ"); words.Add("е", "e"); words.Add("ж", "ž"); words.Add("з", "z"); words.Add("и", "i"); words.Add("ј", "j"); words.Add("к", "k"); words.Add("л", "l"); words.Add("љ", "lj"); words.Add("м", "m"); words.Add("н", "n"); words.Add("њ", "nj"); words.Add("о", "o"); words.Add("п", "p"); words.Add("р", "r"); words.Add("с", "s"); words.Add("т", "t"); words.Add("ћ", "ć"); words.Add("у", "u"); words.Add("ф", "f"); words.Add("х", "h"); words.Add("ц", "c"); words.Add("ч", "č"); words.Add("џ", "dž"); words.Add("ш", "š"); var source = text; foreach (KeyValuePair<string, string> pair in words) { source = source.Replace(pair.Key, pair.Value); } return source; }ACTUALIZAR 1
Como se solicita en el comentario, aquí está mi lista de exenciones:
"СIТУ":"CITY", "OBEX":"OBEX"Ahora tiene solo estos dos ejemplos, para prueba, pero es imposible tener una lista de exención funcional real con tantas posibilidades.
Espero que si la aplicación encuentra una letra latina, simplemente la ignore y la deje como está. Ya está funcionando así para las letras latinas que no existen como cirílico o que existen pero tienen el mismo significado, como las letras AEODGTEJKLMN... Tengo problemas con las letras que se ven iguales en el alfabeto latino y cirílico pero tienen un significado diferente, letras como С(S), Х(H), У(Y), P(R)...
ACTUALIZAR 2
Estos son algunos ejemplos de entradas solicitadas en el comentario. El signo de barra, por supuesto, no aparece en la entrada , solo lo agregué para que pueda distinguir la parte latina.
...ПОВЕРИОЦ /LЕNS OBEX DОО/, У СКЛАДУ СА ОДРЕДБОМ...
...
... за уговор о отварању отварању кредитне линије компанијом / "down Citis" / и распон месечне каматне стопе ...
...КОРИСТ ПОВЕРИОЦА /ATР BANK TOUR/, СА СЕДИШТЕМ...