是否可以將西里爾字符串轉換爲英文(拉丁文)在c#中?例如,我需要將「石油」中的「Петролеум」轉換爲其他類型。 另外我忘了提及,如果我有西里爾字符串它需要保持那樣,所以我可以以某種方式檢查?如何將西里爾字符串轉換爲英文在c#
回答
我對西里爾語並不熟悉,但如果它只是西里爾文字符與拉丁字符的一對一映射,您可以使用字符對的字典並分別映射每個字符:
var map = new Dictionary<char, string>
{
{ 'П', "P" },
{ 'е', "e" },
{ 'т', "t" },
{ 'р', "r" },
...
}
var result = string.Concat("Петролеум".Select(c => map[c]));
你當然可以將這些字母映射到拉丁文轉錄,但在大多數情況下你不會得到英文單詞。例如。 РоссийскаяФедерация轉錄到Rossiyskaya Federatsiya。 wikipedia提供了映射的概述。您可能正在尋找翻譯服務,谷歌可能提供了一個API。
你爲什麼要這樣做?一對一改變角色通常甚至不會產生合理的音譯,更不用說翻譯。您可能會發現this帖子是有用的。
您正在尋找將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
- 1. 如何將俄文字符串轉換爲西裏爾字母?
- 2. 如何使用javascript將西里爾字符轉換爲ASCII碼
- 3. 如何轉換俄語西裏爾字母的字符串?
- 4. 如何將MS字Unicode 2字節西里爾字符轉換爲CP866 1字節西里爾字
- 5. 如何轉換成西里爾文
- 6. C#替換西里爾字符失敗
- 7. Unicode轉換西裏爾字母符號串在python
- 8. 如何將英尺轉換爲英寸字符串
- 9. 無法將Unicode符號轉換爲西里爾文
- 10. 從OEM 866字符集(西里爾文)轉換爲UTF?
- 11. 轉換字符串與編碼UTF8符號到西里爾符號C#
- 12. Python3將非英文字符轉換爲英文字符
- 13. 如何將Objective-C字符串轉換爲C字符串?
- 14. 如何將存儲爲LATIN1(sql)的西里爾文轉換爲帶有iconv的真正的UTF8西里爾語?
- 15. 從西里爾文轉換爲拉丁文C
- 16. 如何將儀表轉換爲英里
- 17. 將字符串轉換爲布爾
- 18. 將字符串轉換爲布爾值
- 19. C# - 如何將轉義字符串轉換爲文字字符串?
- 20. 函數將西里爾文轉換爲拉丁文
- 21. 如何將土耳其的字符轉換爲英文字符串?
- 22. C++ - 將字符串轉換爲字符
- 23. 將阿拉伯數字轉換爲英文字符串
- 24. 字符串替換西里爾文中的精確匹配
- 25. 如何將c字符串轉換爲d字符串?
- 26. 如何將C++字符串轉換爲.NET字符串^?
- 27. 如何使用C#將字符串轉換爲PascalCase字符串?
- 28. 在C#中將布爾值轉換爲字符串值
- 29. 如何使用php將英文轉換爲西班牙文
- 30. 如何在ActionScript中將字符串轉換爲布爾值?
嘿,剛剛發現的東西,這可能是對你很重要了。如果您正在翻譯正式文本(如廣告客戶的地址或其他內容),則需要檢查是否有包含音譯表的特殊音譯法。例如,保加利亞有這樣的法律,任何濫用都可能導致法律問題。除表格外,可能還會描述該規則的例外情況,您需要遵循。像България是保加利亞,而不是Balgariya。 – vlood 2010-09-14 09:26:06