On Fri, 4 Nov 2005, Patrik Beno wrote:

Friday, November 4, 2005, 8:12:56 PM, you wrote:

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.


tak, pekne odborne podane, dufal som, ze to ma niekto zmaknute :-)

lenze ak tomu dobre rozumiem, cely postup je v zasade zalozeny na
kategorizacii znakov, a tuto kategorizaciu si znaky nenesu priamo v
sebe.

to znamena, ze je nutne tieto informacie ziskavat z nejakej databazy,
ergo - prevodnej tabulky...

rozumiem tomu spravne? :-)

Ano, jsou to v podstate tabulky. Je to informace na stejne urovni jako napr. velikost znaku a dokonce pochazi ze stejneho zdroje, tj. z http://www.unicode.org/Public/UNIDATA/UnicodeData.txt. Bohuzel v Jave z toho vybrali pouze neco a zbytek byl podle vseho zahozen a to vcetne normalizace. Ale v te IBM knihovne by to melo byt.

S pozdravem,

Stepan Roh

Odpovedet emailem