|
[ dc43 @ 18.09.2005. 22:23 ] @
| Napisao sam funkciju u C#-u koja konvertuje string napisan na latinici u string napisan na ćirilici. Dajem dozvolu svima da koriste ovu funkciju u svojim programima. Jedino tražim da mi javite o tome, ali nije obavezno. Bilo bi mi drago da čujem gde je bila od koristi.
Fajl u kom se nalazi ova funkcija mora biti snimljen sa encodingom Unicode (UTF-8).
Funkcija je osetljiva na veličinu slova (letter case). Kada su u pitanju slova "lj", "nj" i "dž", jedino oba mala slova se prevode u malo ćirilično slovo (lj -> lj, Lj -> Lj, lJ -> Lj, LJ -> Lj).
Karakteri koji ne spadaju u latinicu se prenose neizmenjeni.
Pošto poruke na forumu automatski bivaju konvertovane u latinicu, nisam stavio code u poruku, jer ne bi imalo smisla.
Prikačio sam zip fajl sa primer projektom. Sama funkcija se nalazi u fajlu ConvertLatinToCyrillic.cs.
JavaScript verzija funkcije je prvo nastala. http://www.elitesecurity.org/tema/135980
Potom ova C# verzija.
A zatim Transact-SQL verzija. Prilikom pisanja i testiranja Transact-SQL sam najviše naučio, jer ranije nisam pisao u tom jeziku. http://www.elitesecurity.org/tema/135994 |
[ aXi @ 23.09.2005. 03:37 ] @
Svaka cast matori
[ ivanivan94 @ 02.09.2014. 11:54 ] @
Jeste da je tema starija ali ovaj code (funkcija) mi se sviđa, pa sam hteo pitati dali je moguće napisati u C# code. ćirilica u latinicu, pošto se ovaj odnosi na konvertovanje isključivo latinice u ćirilicu.Hvala.
[ Mihajlo Cvetanović @ 02.09.2014. 12:56 ] @
U fajlu ConvertLatinToCyrillic.cs imaš zamenu svakog latiničnog slova u ćirilično. Ako bi duplirao tu funkciju, preimenovao je u ConvertCyrillicToLatin, i zamenio ove parove slova, dobio bi manje-više to što tražiš. Pretvaranje ćiriličnih LJ, NJ, i DŽ je mali problem, jer algoritam teško može da zaključi da li veliko ćirilično DŽ treba da se translira u latinično DŽ ili Dž. To bi možda moglo da se reši sa dodatnim bool parametrom te nove funkcije, bool useTitleCase, pa ako je false onda DŽ, a ako je true onda Dž. Neka korisnik funkcije sam kaže kakva mu konverzija treba.
[ Dejan Carić @ 02.09.2014. 14:13 ] @
Code:
public class Util
{
private static readonly Dictionary<char, string> Mappings = new Dictionary<char, string>
{
{ 'A', "A" }, { 'B', "B" }, { 'V', "V" }, { 'G', "G" }, { 'D', "D" },
{ 'Đ', "Đ" }, { 'E', "E" }, { 'Ž', "Ž" }, { 'Z', "Z" }, { 'I', "I" },
{ 'J', "J" }, { 'K', "K" }, { 'L', "L" }, { 'Lj', "Lj" }, { 'M', "M" },
{ 'N', "N" }, { 'Nj', "Nj" }, { 'O', "O" }, { 'P', "P" }, { 'R', "R" },
{ 'S', "S" }, { 'T', "T" }, { 'Ć', "Ć" }, { 'U', "U" }, { 'F', "F" },
{ 'H', "H" }, { 'C', "C" }, { 'Č', "Č" }, { 'Dž', "Dž" }, { 'Š', "Š" },
{ 'a', "a" }, { 'b', "b" }, { 'v', "v" }, { 'g', "g" }, { 'd', "d" },
{ 'đ', "đ" }, { 'e', "e" }, { 'ž', "ž" }, { 'z', "z" }, { 'i', "i" },
{ 'j', "j" }, { 'k', "k" }, { 'l', "l" }, { 'lj', "lj" }, { 'm', "m" },
{ 'n', "n" }, { 'nj', "nj" }, { 'o', "o" }, { 'p', "p" }, { 'r', "r" },
{ 's', "s" }, { 't', "t" }, { 'ć', "ć" }, { 'u', "u" }, { 'f', "f" },
{ 'h', "h" }, { 'c', "c" }, { 'č', "č" }, { 'dž', "dž" }, { 'š', "š" }
};
public static string CyrillicToLatin(string text)
{
if (string.IsNullOrWhiteSpace(text))
{
return text;
}
var sb = new StringBuilder(text.Length);
foreach (var character in text)
{
if (Mappings.ContainsKey(character))
{
sb.Append(Mappings[character]);
}
else
{
sb.Append(character);
}
}
return sb.ToString();
}
}
edit:
Forum konvertuje cirilicu u latinicu. Kod mozes preuzeti sa ovog linka: http://www.dcaric.com/ew-images/20140902/cirilica_u_latinicu.zip
[ ivanivan94 @ 03.09.2014. 10:39 ] @
Hvala na postovima iznad. Probao sam da u okviru istog fajla ConvertLatinToCyrillic.cs imam konverziju i latinice u ćirilicu i ćirilice u latinicu ( to bi mi najviše odgovaralo), i sve lepo radi (kada u text box1 kucam latinicu u text box 2 imam ćirilicu i obratno), sem naravno kada su u pitanju ćirilična slova:Lj,Nj,Dž, tj. kada konvertujem ćirilicu u latinicu i kucam (ili kopiram) pojedinačno neko od ova tri ćirilična slova sve je ok, ali ako ih kucam u sklopu neke reči onda se ona prvobitno konvertuju pravilno u latinicu ali čim dodam sledeće slovo pored njega ono se odma vraća ponovno u ćirilično.
Probao sam da menjam funkciju ali neuspešno. Ovako izgleda ConvertLatinToCyrillic.cs kod mene pa ako neko ima eventualno neku ideju i voljan je, kako rešiti ova tri ćirilična slova Lj,Nj,Dž, u okviru ove funkcije neka se javi.Hvala.
Code: using System;
namespace Tools
{
public class Utils
{
public static string ConvertLatinToCyrillic(string latin)
{
string c = "";
string par = "";
string slovo = "";
int i;
for (i=0; i<latin.Length; i++)
{
if (i<latin.Length-1)
{
par = latin.Substring(i, 2);
}
else
{
par = latin.Substring(i, 1);
}
switch (par)
{
case "lj": c += "lj"; i++; break; // lj
case "lj": c += "lj"; i++; break;
case "Lj": c += "Lj"; i++; break;
case "Lj": c += "Lj"; i++; break;
case "LJ": c += "Lj"; i++; break;
case "lJ": c += "Lj"; i++; break;
case "nj": c += "nj"; i++; break; // nj
case "nj": c += "nj"; i++; break;
case "Nj": c += "Nj"; i++; break;
case "NJ": c += "Nj"; i++; break;
case "Nj": c += "NJ"; i++; break;
case "nJ": c += "Nj"; i++; break;
case "dž": c += "dž"; i++; break; // dž
case "dž": c += "dž"; i++; break;
case "Dž": c += "Dž"; i++; break;
case "Dž": c += "DŽ"; i++; break;
case "DŽ": c += "Dž"; i++; break;
case "dŽ": c += "Dž"; i++; break;
default:
slovo = par.Substring(0,1);
switch (slovo)
{
case "a": c += "a"; break;
case "A": c += "A"; break;
case "b": c += "b"; break;
case "b": c += "b"; break;
case "B": c += "B"; break;
case "B": c += "B"; break;
case "c": c += "c"; break;
case "c": c += "c"; break;
case "C": c += "C"; break;
case "C": c += "C"; break;
case "č": c += "č"; break;
case "č": c += "č"; break;
case "Č": c += "Č"; break;
case "Č": c += "Č"; break;
case "ć": c += "ć"; break;
case "ć": c += "ć"; break;
case "Ć": c += "Ć"; break;
case "Ć": c += "Ć"; break;
case "d": c += "d"; break;
case "d": c += "d"; break;
case "D": c += "D"; break;
case "D": c += "D"; break;
case "đ": c += "đ"; break;
case "đ": c += "đ"; break;
case "Đ": c += "Đ"; break;
case "Đ": c += "Đ"; break;
case "e": c += "e"; break;
case "E": c += "E"; break;
case "f": c += "f"; break;
case "f": c += "f"; break;
case "F": c += "F"; break;
case "F": c += "F"; break;
case "g": c += "g"; break;
case "g": c += "g"; break;
case "G": c += "G"; break;
case "G": c += "G"; break;
case "h": c += "h"; break;
case "h": c += "h"; break;
case "H": c += "H"; break;
case "H": c += "H"; break;
case "i": c += "i"; break;
case "i": c += "i"; break;
case "I": c += "I"; break;
case "I": c += "I"; break;
case "j": c += "j"; break;
case "j": c += "j"; break;
case "J": c += "J"; break;
case "J": c += "J"; break;
case "k": c += "k"; break;
case "k": c += "k"; break;
case "K": c += "K"; break;
case "K": c += "K"; break;
case "l": c += "l"; break;
case "l": c += "l"; break;
case "L": c += "L"; break;
case "L": c += "L"; break;
case "m": c += "m"; break;
case "m": c += "m"; break;
case "M": c += "M"; break;
case "M": c += "M"; break;
case "n": c += "n"; break;
case "n": c += "n"; break;
case "N": c += "N"; break;
case "N": c += "N"; break;
case "o": c += "o"; break;
case "O": c += "O"; break;
case "p": c += "p"; break;
case "p": c += "p"; break;
case "P": c += "P"; break;
case "P": c += "P"; break;
case "r": c += "r"; break;
case "r": c += "r"; break;
case "R": c += "R"; break;
case "R": c += "R"; break;
case "s": c += "s"; break;
case "s": c += "s"; break;
case "S": c += "S"; break;
case "S": c += "S"; break;
case "š": c += "š"; break;
case "š": c += "š"; break;
case "Š": c += "Š"; break;
case "Š": c += "Š"; break;
case "t": c += "t"; break;
case "t": c += "t"; break;
case "T": c += "T"; break;
case "T": c += "T"; break;
case "u": c += "u"; break;
case "u": c += "u"; break;
case "U": c += "U"; break;
case "U": c += "U"; break;
case "v": c += "v"; break;
case "v": c += "v"; break;
case "V": c += "V"; break;
case "V": c += "V"; break;
case "z": c += "z"; break;
case "z": c += "z"; break;
case "Z": c += "Z"; break;
case "Z": c += "Z"; break;
case "ž": c += "ž"; break;
case "ž": c += "ž"; break;
case "Ž": c += "Ž"; break;
case "Ž": c += "Ž"; break;
default:
c += slovo;
break;
}
break;
}
}
return c;
}
}
}
[ Mihajlo Cvetanović @ 03.09.2014. 13:11 ] @
Možda si primetio da se ovde sva ćirilica konvertuje u latinicu, čak i u kodu. Ako kod ima ćirilicu u sebi onda ga bolje postavi na http://pastebin.com/ a ovde samo stavi link.
[ Dejan Vesic @ 03.09.2014. 13:41 ] @
Svakako preporučujem da pogledate i ovo:
http://www.vesic.org/english/blog/c-sharp/transliteration-easy-way-microsoft-transliteration-utility/
Jako zgodno, koristio u gomili komercijalnih projekata.
Pozdrav,
Dejan
[ ivanivan94 @ 03.09.2014. 16:01 ] @
O tek sam sada primetio.Hvala.Evo link od koda sa mog posta iznad:
http://pastebin.com/4rJHMEXt
Edit:
Hvala vam Dejane, ovo jeste korisno,nego ja sam čisto hteo iz edukativnih razloga ovu postojeću funkciju eventualno prilagoditi istovremeno i konvertovanju ćirilice u latinicu kao i latinice u ćirilicu naravno ako je moguće.Pozdrav.
[ Cyberghost @ 04.10.2014. 13:30 ] @
Evo ga link sa funkcijom CyrilicToLatin
http://pastebin.com/N8riK6zD
[ ivanivan94 @ 27.10.2014. 14:00 ] @
Sa zakašnjenjem bravo za Cyberghost-a, Ovaj kod konvertovanja ćirilice u latinicu radi bez greške.Hvala.
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|