Как я могу конвертировать кириллицу в английский в C # - PullRequest
7 голосов
/ 20 июня 2010

Возможно ли преобразовать кириллицу в английский (латиница) в c #?Например мне нужно конвертировать "Петролеум" в "Петролеум".Плюс я забыл упомянуть, что если у меня есть кириллическая строка, она должна оставаться такой, так что я могу как-нибудь это проверить?

Ответы [ 10 ]

7 голосов
/ 20 июня 2010

Я не знаком с кириллицей, но если вам нужно только однозначное сопоставление символов кириллицы с латинскими, вы можете использовать словарь пар символов и сопоставлять каждый символ индивидуально:

var map = new Dictionary<char, string>
{
    { 'П', "P" },
    { 'е', "e" },
    { 'т', "t" },
    { 'р', "r" },
    ...
}

var result = string.Concat("Петролеум".Select(c => map[c]));
3 голосов
/ 20 июня 2010

Если вы используете Windows 7, вы можете воспользоваться новым API ELS (Extended Linguistic Services), который предоставляет вам возможность транслитерации. Взгляните на Windows 7 API Code Pack - это набор управляемых оболочек поверх многих новых API в Windows 7 (таких как новая панель задач). Посмотрите в папке Samples пример Transliterator, вы обнаружите, что это именно то, что вы ищете:

3 голосов
/ 20 июня 2010

Конечно, вы можете сопоставить буквы латинской транскрипции, но в большинстве случаев вы не получите из них английское слово. Например. Российская Федерация транскрибирует Российскую Федерацию. Википедия предлагает обзор картирования. Вы, вероятно, ищете службу перевода, Google, вероятно, предлагает API для этого.

2 голосов
/ 25 февраля 2016

Этот метод очень быстрый:

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();
}
2 голосов
/ 12 сентября 2014

Вы можете использовать функцию 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;
        }
    }
}

Если вы измените

с латиницы на латинский:

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

с латыни на кристальный

source.Replace(pair.Value,pair.Key);
2 голосов
/ 20 июня 2010

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

Google предлагает этот сервис транслитерации на основе AJAX. Таким образом, вы можете избежать вычислений транслитерации самостоятельно и позволить Google делать их на лету. Это означало бы позволить клиентской стороне отправлять запрос в Google, так что это означает, что вашему приложению потребуется какой-то веб-вывод для работы этого решения.

0 голосов
/ 16 февраля 2017

Это решение для сербской кириллически-латинской транслитерации для такой формы: форма

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;
        }
    }
}
0 голосов
/ 20 июня 2010

Вы ищете способ транслитерации русских слов, написанных на кириллице (в некоторых кодировках, например, даже на латинице, поскольку iso 8859-5 aka Latin-5 - для кириллицы) в латинский алфавит (с ударениями)?

Я не знаю, есть ли в .NET что-то для транслитерации, но я осмелюсь сказать, что (как и у многих других хороших фреймворков) этого нет. Эта ссылка на википедию может дать вам некоторые идеи для реализации транслитерации, но это не единственный способ, и помните, что кириллические системы написания используются не только русским языком, а способ применения транслитерации может отличаться в зависимости от языка, в котором используется система письма. Например. см. То же самое для болгарского . Может эта ссылка (всегда с wp) может быть также интересна, если вы хотите самостоятельно запрограммировать транслитератор.

0 голосов
/ 20 июня 2010

Почему вы хотите это сделать?Смена символов один на один обычно даже не дает разумной транслитерации, а тем более перевода.Вас может заинтересовать эта запись.

0 голосов
/ 20 июня 2010

Используйте словарь с русскими и английскими словами в качестве справочной таблицы.Чтобы собрать его, нужно будет много печатать, но это полное доказательство.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...