如何将西里尔字符串转换为英文在c#
是否可以将西里尔字符串转换为英文(拉丁文)在c#中?例如,我需要将“石油”中的“Петролеум”转换为其他类型。 另外我忘了提及,如果我有西里尔字符串它需要保持那样,所以我可以以某种方式检查?如何将西里尔字符串转换为英文在c#
我对西里尔语并不熟悉,但如果它只是西里尔文字符与拉丁字符的一对一映射,您可以使用字符对的字典并分别映射每个字符:
var map = new Dictionary<char, string>
{
{ 'П', "P" },
{ 'е', "e" },
{ 'т', "t" },
{ 'р', "r" },
...
}
var result = string.Concat("Петролеум".Select(c => map[c]));
你当然可以将这些字母映射到拉丁文转录,但在大多数情况下你不会得到英文单词。例如。 РоссийскаяФедерация转录到Rossiyskaya Federatsiya。 wikipedia提供了映射的概述。您可能正在寻找翻译服务,谷歌可能提供了一个API。
使用带有俄语和英语单词的字典作为查找表。打造它会有很多打字,但它充分证明。
不是真的。如果谷歌不能生成一个傻瓜证明字典,他也不能。 – Femaref 2010-06-20 14:32:45
您正在寻找将cirillic(某些编码,例如,甚至拉丁编码,因为iso 8859-5又名Latin-5用于西里尔文)转换为拉丁字母(带有重音符号)的俄语单词的方式吗?
我不知道.NET是否有音译的内容,但我敢说它(还有很多其他好的框架)没有。这个wikipedian链接可以给你一些想法来实现translitteration,但它不是唯一的方法,并且记住西里尔文写作系统不被俄语使用,你应用translitteration的方式可能会因使用写作系统的语言而异。例如。 see the same for bulgarian。如果您想自己编写translitterator,可能还会有兴趣参加5月份的this link(总是来自wp)。
http://code.google.com/apis/ajaxlanguage/documentation/#Transliteration
谷歌提供的这种基于AJAX音译服务。通过这种方式,您可以避免自己计算音译,并让Google即时处理这些音译。这意味着让客户端向Google发出请求,这意味着您的应用需要有某种基于Web的输出才能使此解决方案发挥作用。
如果您使用Windows 7,则可以利用新的ELS(扩展语言服务)API,它为您提供音译功能。 查看Windows 7 API Code Pack - 这是一组托管包装器,位于Windows 7中的许多新API之上(如新的任务栏)。看在了Transliterator
例如Samples
文件夹,你会发现它是你在寻找什么:
可以使用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<string, string> words = new Dictionary<string, string>();
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<string, string> pair in words)
{
source = source.Replace(pair.Key, pair.Value);
}
textBox2.Text = source;
}
}
}
如果更改
cryllic拉丁文:
text.Replace(pair.Key, pair.Value);
拉丁语cryllic
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();
}
这是塞尔维亚西里尔拉丁音译解决方案的形式是这样的: form
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
Dictionary<string, string> slova = new Dictionary<string, string>();
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<string, string> 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<string, string> 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;
}
}
}
如果“lj”,“nj”和“dž”不在字典的开头,它将被翻译为“лј”,“нј”和“дж”而不是“љ”,“њ”和“џ” ”。此外,distionary应该有大写字母“Љ”,“Њ”和“Џ”,因为如果没有它,它将被翻译为“LJ”,“NJ”和“DŽ”,而不是“Lj”,“Nj”和“DZ”。其他大写字符可以用ToUpper()方法完成。 – 2017-02-22 21:30:00
嘿,刚刚发现的东西,这可能是对你很重要了。如果您正在翻译正式文本(如广告客户的地址或其他内容),则需要检查是否有包含音译表的特殊音译法。例如,保加利亚有这样的法律,任何滥用都可能导致法律问题。除表格外,可能还会描述该规则的例外情况,您需要遵循。像България是保加利亚,而不是Balgariya。 – vlood 2010-09-14 09:26:06