On Fri, 4 Nov 2005, Jan Dvořák wrote:

mam odstranit diakriticka znamenka ze vsech pismen v retezci, ktera jsou v latince. Nejen ceska diakritika, ale vsechny mozne akcenty nad pismeny anglicke abecedy.
Verze Javy je 1.5.

Nevite lepsi zpusob nez prevodni tabulku?

Krok cislo 1: pro kazdy znak provest konverzi do normalni formy NFD nebo NFKD (dekompozici).

Krok cislo 2: ze vznikleho zahodit vsechny znaky s tridou Mn (non-spacing mark), zbytek by mely byt zakladni (base) znaky.

Tento postup ma nekoli problemu:

- myslim, ze Java neposkytuje konverzi do normalni formy (alespon ne v core API), nicmene Unicode knihovna od IBM by to poskytovat mela (nezkousel jsem); test na tridu viz Character.NON_SPACING_MARK a navazujici

- rozpadnou se i jine znaky nez jen ty s diakritikou, napr. nektere ligatury - zda se, ze uzitim formy NFD misto NFKD (coz provadi nejprve kompatibilni dekompozici) by se vetsina takovych dala odstavit; a jelikoz v zadani se hovori o anglicke abecede, pak staci dekomponovat pouze znaky z Latin bloku (basic, supplement, ext. A, ext. B a ext. additional)

Vice viz unicode.org.

S pozdravem,

Stepan Roh

Odpovedet emailem