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