Diskuze: Odstranění diakritiky

C# .NET .NET (C# a Visual Basic) Odstranění diakritiky American English version English version

Avatar
Posix
Člen
Avatar
Posix:

Nějaký jednoduchý kód na odstranění diakritiky nejen pro český jazyk? Prostě chci dostat jen znaky anglické abecedy. Asi moc neumím hledat. Našel jsem jen tento kód, ale ten mi ve windows phonu jaksi nejde. Nenajde to funkci Normalize.

public static string RemoveDiacritics(String s)
{
    // oddělení znaků od modifikátorů (háčků, čárek, atd.)
    s = s.Normalize(System.Text.NormalizationForm.FormD);
    System.Text.StringBuilder sb = new System.Text.StringBuilder();

    for (int i = 0; i < s.Length; i++)
    {
        // do řetězce přidá všechny znaky kromě modifikátorů
        if (System.Globalization.CharUnicodeInfo.GetUnicodeCategory(s[i]) != System.Globalization.UnicodeCategory.NonSpacingMark)
        {
             sb.Append(s[i]);
        }
    }

     // vrátí řetězec bez diakritiky
     return sb.ToString();
}
Odpovědět 30.4.2014 9:59
Proč to dělat jednoduše, když to jde složitě.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Posix
David Čápka:

IMHO to máš nejlepší prostě replacovat, můžu ti poslat seznam těch znaků, který používám v PHP:

$charsFrom = 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝßàáâãäåçèéêëìíîïñòóôõöùúûüýÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝĞğĠġĢģĤĥĦħĨĩĪīĬĭĮįİıIJijĴĵĶķĸĹĺĻļĽľĿŀŁłŃńŅņŇňʼnŊŋŌōŎŏŐőŒœŔŕŖŗŘřŚśŜŝŞşŠšŢţŤťŦŧŨũŪūŬŭŮůŰűŲųŴŵŶŷŸŹźŻżŽžſ€£';
$charsTo = 'AAAAAACEEEEIIIINOOOOOUUUUYsaaaaaaceeeeiiiinooooouuuuyyAaAaAaCcCcCcCcDdDdEeEeEeEeEeGgGgGgGgHhHhIiIiIiIiIiIJijJjKkkLlLlLlLlLlNnNnNnNnNOoOoOoOEoeRrRrRrSsSsSsSsTtTtTtUuUuUuUuUuUuWwYyYZzZzZzsE';

Projet to cyklem a volat replace je už triviální.

Nahoru Odpovědět  +1 30.4.2014 10:19
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Posix
Člen
Avatar
Odpovídá na David Čápka
Posix:

Ok dik. Zajimalo by me ale, jak to mam resit, kdyz ty pole retezcu from a to nejsou stejne dlouhe, tak jak mam vedet co cim nahradit? :D

Nahoru Odpovědět 30.4.2014 11:33
Proč to dělat jednoduše, když to jde složitě.
Avatar
coells
Redaktor
Avatar
Odpovídá na Posix
coells:

Ten tvůj kód převede string do dekomponovaného unicodu, což je korektní na .NET frameworku. Podle všeho to ale WP nepodporuje a nejlepší způsob je ruční odstranění, viz http://invokeit.wordpress.com/…s-phone-7-x/

 
Nahoru Odpovědět 30.4.2014 11:57
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Posix
David Čápka:

Sry, vlezly mi tam nějaký dvojznaky :D Teď jsou stejný:

        'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝßàáâãäåçèéêëìíîïñòóôõöùúûüýÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝĞğĠġĢģĤĥĦħĨĩĪīĬĭĮįİıĶķĸĹĺĻļĽľĿŀŁłŃńŅņŇňʼnŊŋŌōŎŏŐőŔŕŖŗŘřŚśŜŝŞşŠšŢţŤťŦŧŨũŪūŬŭŮůŰűŲųŴŵŶŷŸŹźŻżŽžſ';
'AAAAAACEEEEIIIINOOOOOUUUUYsaaaaaaceeeeiiiinooooouuuuyyAaAaAaCcCcCcCcDdDdEeEeEeEeEeGgGgGgGgHhHhIiIiIiIiIiKkkLlLlLlLlLlNnNnNnNnNOoOoOoRrRrRrSsSsSsSsTtTtTtUuUuUuUuUuUuWwYyYZzZzZzs';

Ty dvojznaky se musí pak udělat např. nějakým polem, ale žádný mě blízký jazyk je nepoužívá, takže jsem je neřešil.

Editováno 30.4.2014 12:09
Nahoru Odpovědět 30.4.2014 12:06
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 5 zpráv z 5.