如何在c#中将西里尔字符串转换为英文

在c#中将西里尔字符串转换为英语(拉丁语)是否可行? 例如,我需要在“石油”中转换“Петролеум”。 另外我忘了提到如果我有西里尔字符串它需要保持这样,所以我能以某种方式检查吗?

我不熟悉西里尔语,但如果它只是西里尔字符与拉丁字符的一对一映射,那么您可以使用字符对字典并单独映射每个字符:

var map = new Dictionary { { 'П', "P" }, { 'е', "e" }, { 'т', "t" }, { 'р', "r" }, ... } var result = string.Concat("Петролеум".Select(c => map[c])); 

您当然可以将字母映射到拉丁语转录,但在大多数情况下,您不会从中获得英语单词。 例如РоссийскаяФедерация转录到Rossiyskaya Federatsiya。 维基百科提供了映射的概述。 您可能正在寻找翻译服务,谷歌可能会为此提供api。

如果您使用的是Windows 7,则可以利用新的ELS(扩展语言服务)API,它为您提供音译function。 看一下Windows 7 API代码包 – 它是Windows 7中许多新API(例如新的任务栏)之上的一组托管包装器。 查看Transliterator示例的Samples文件夹,您会发现它正是您正在寻找的内容:

http://code.google.com/apis/ajaxlanguage/documentation/#Transliteration

Google提供这种基于AJAX的音译服务。 通过这种方式,您可以避免自己计算音译,并让Google随时进行音译。 这意味着让客户端向Google提出请求,这意味着您的应用需要具有某种基于Web的输出才能使此解决方案正常工作。

您可以使用text.Replace(pair.Key, pair.Value)函数。

 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace Transliter { public partial class Form1 : Form { Dictionary words = new Dictionary(); public Form1() { InitializeComponent(); words.Add("а", "a"); words.Add("б", "b"); words.Add("в", "v"); words.Add("г", "g"); words.Add("д", "d"); words.Add("е", "e"); words.Add("ё", "yo"); words.Add("ж", "zh"); words.Add("з", "z"); words.Add("и", "i"); words.Add("й", "j"); words.Add("к", "k"); words.Add("л", "l"); words.Add("м", "m"); words.Add("н", "n"); words.Add("о", "o"); words.Add("п", "p"); words.Add("р", "r"); words.Add("с", "s"); words.Add("т", "t"); words.Add("у", "u"); words.Add("ф", "f"); words.Add("х", "h"); words.Add("ц", "c"); words.Add("ч", "ch"); words.Add("ш", "sh"); words.Add("щ", "sch"); words.Add("ъ", "j"); words.Add("ы", "i"); words.Add("ь", "j"); words.Add("э", "e"); words.Add("ю", "yu"); words.Add("я", "ya"); words.Add("А", "A"); words.Add("Б", "B"); words.Add("В", "V"); words.Add("Г", "G"); words.Add("Д", "D"); words.Add("Е", "E"); words.Add("Ё", "Yo"); words.Add("Ж", "Zh"); words.Add("З", "Z"); words.Add("И", "I"); words.Add("Й", "J"); words.Add("К", "K"); words.Add("Л", "L"); words.Add("М", "M"); words.Add("Н", "N"); words.Add("О", "O"); words.Add("П", "P"); words.Add("Р", "R"); words.Add("С", "S"); words.Add("Т", "T"); words.Add("У", "U"); words.Add("Ф", "F"); words.Add("Х", "H"); words.Add("Ц", "C"); words.Add("Ч", "Ch"); words.Add("Ш", "Sh"); words.Add("Щ", "Sch"); words.Add("Ъ", "J"); words.Add("Ы", "I"); words.Add("Ь", "J"); words.Add("Э", "E"); words.Add("Ю", "Yu"); words.Add("Я", "Ya"); } private void button1_Click(object sender, EventArgs e) { string source = textBox1.Text; foreach (KeyValuePair pair in words) { source = source.Replace(pair.Key, pair.Value); } textBox2.Text = source; } } } 

如果你改变了

哭到拉丁语:

 text.Replace(pair.Key, pair.Value); 

拉丁到哭泣

 source.Replace(pair.Value,pair.Key); 

这种方法非常快:

 static string[] CyrilicToLatinL = "a,b,v,g,d,e,zh,z,i,j,k,l,m,n,o,p,r,s,t,u,f,kh,c,ch,sh,sch,j,y,j,e,yu,ya".Split(','); static string[] CyrilicToLatinU = "A,B,V,G,D,E,Zh,Z,I,J,K,L,M,N,O,P,R,S,T,U,F,Kh,C,Ch,Sh,Sch,J,Y,J,E,Yu,Ya".Split(','); public static string CyrilicToLatin(string s) { var sb = new StringBuilder((int)(s.Length * 1.5)); foreach (char c in s) { if (c >= '\x430' && c <= '\x44f') sb.Append(CyrilicToLatinL[c - '\x430']); else if (c >= '\x410' && c <= '\x42f') sb.Append(CyrilicToLatinU[c - '\x410']); else if (c == '\x401') sb.Append("Yo"); else if (c == '\x451') sb.Append("yo"); else sb.Append(c); } return sb.ToString(); } 

使用带有俄语和英语单词的词典作为查找表。 构建它会有很多打字,但它是完全certificate。

你为什么要这样做? 一对一改变字符通常甚至不会产生合理的音译,更不用说翻译了。 您可能会发现这篇文章很有意思。

你正在寻找一种方式来翻译用cirillic写的俄语单词(在一些编码中,例如甚至是拉丁语编码,因为iso 8859-5又名拉丁语-5用于西里尔语)到拉丁字母表(带有重音符号)?

我不知道.NET是否有音译,但我敢说(正如许多其他好的框架)没有。 这个wikipedian链接可以给你一些实现translitteration的想法,但它不是唯一的方法,并且记住只有俄语才使用西里尔语书写系统,并且你应用translitteration的方式可能因使用书写系统的语言而异。 例如,对于保加利亚人来说也是如此 。 如果你想自己编程translitterator, 这个链接 (总是从wp)也可能很有趣。

这是塞尔维亚语西里尔语 – 拉丁音译的解决方案,forms如下: forms

 namespace WindowsFormsApplication1 { public partial class Form1 : Form { Dictionary slova = new Dictionary(); public Form1() { InitializeComponent(); slova.Add("Љ", "Lj"); slova.Add("Њ", "Nj"); slova.Add("Џ", "Dž"); slova.Add("љ", "lj"); slova.Add("њ", "nj"); slova.Add("џ", "dž"); slova.Add("а", "a"); slova.Add("б", "b"); slova.Add("в", "v"); slova.Add("г", "g"); slova.Add("д", "d"); slova.Add("ђ", "đ"); slova.Add("е", "e"); slova.Add("ж", "ž"); slova.Add("з", "z"); slova.Add("и", "i"); slova.Add("ј", "j"); slova.Add("к", "k"); slova.Add("л", "l"); slova.Add("м", "m"); slova.Add("н", "n"); slova.Add("о", "o"); slova.Add("п", "p"); slova.Add("р", "r"); slova.Add("с", "s"); slova.Add("т", "t"); slova.Add("ћ", "ć"); slova.Add("у", "u"); slova.Add("ф", "f"); slova.Add("х", "h"); slova.Add("ц", "c"); slova.Add("ч", "č"); slova.Add("ш", "š"); } // Method for cyrillic to latin private void button1_Click(object sender, EventArgs e) { string source = textBox1.Text; foreach (KeyValuePair pair in slova) { source = source.Replace(pair.Key, pair.Value); // For upper case source = source.Replace(pair.Key.ToUpper(), pair.Value.ToUpper()); } textBox2.Text = source; } // Method for latin to cyrillic private void button2_Click(object sender, EventArgs e) { string source = textBox2.Text; foreach (KeyValuePair pair in slova) { source = source.Replace(pair.Value, pair.Key); // For upper case source = source.Replace(pair.Value.ToUpper(), pair.Key.ToUpper()); } textBox1.Text = source; } } }