tr és utf8 ékezetek (bár workaround, de megoldva)

Fórumok

Sziasztok!

Anno iso8859-2 terminal és karakterkódolás mellett az ékezeteimtől így szabadultam meg:

echo "Ezt kell ékezetteleníteni" | tr " űáéúőóüöíŰÁÉÚŐÓÜÖÍ" "_uaeuoouoiUAEUOOUOI" 

és szépen működött.

Most már utf8-at használok és úgy vettem észre, hogy a tr, ezt nem szereti:


fifi@silverbook:~$ echo "Ezt kell ékezetteleníteni" | tr " űáéúőóüöíŰÁÉÚŐÓÜÖÍ" "_uaeuoouoiUAEUOOUOI"
Ezt_kell_IokezettelenIIteni
fifi@silverbook:~$ echo "Ezt kell ékezetteleníteni" | recode utf8..latin2 | tr " űáéúőóüöíŰÁÉÚŐÓÜÖÍ" "_uaeuoouoiUAEUOOUOI"
Ezt_kell_ékezetteleníteni
fifi@silverbook:~$ 

Szerintem releváns adataim:


SHELL=/bin/bash
LANG=en_US.UTF-8
LC_NUMERIC=hu_HU.UTF-8
LC_CTYPE=hu_HU.UTF-8
TERM=rxvt-unicode
COLORTERM=rxvt-xpm

fifi@silverbook:~$ tr --version
tr (GNU coreutils) 5.97
fifi@silverbook:~$ cat /etc/debian_version 
4.0

Mit rontok el? Mi kerülte el a figyelmem? Esetleg tr nincs felkészítve a unicode-ra?

Előre is köszi a segítséget!

Bye, Fifi

Hozzászólások

Szerintem semmit nem rontottál el. A tr kivételesen csak angolul ért....

A megoldás pl. a sed:
echo aAáéüő | sed 'y/áéőü/aeou/''

Kösz, a sed így jó:

echo "Amit ékezettelenítenék" | sed "y, űáéúőóüöíŰÁÉÚŐÓÜÖÍ,_uaeuoouoiUAEUOOUOI,"

Én is gondoltam rá, hogy megcsinálom vim-mel vagy sed-del, de mint írtam latin2-vel nem voltak gondjai a tr-nek.
Google, meg nem segített (lehet, hogy rosszul kerestem) abban, hogy a tr tud-e unicode-t kezelni, ezért kérdeztem itt.

Mégegyszer köszönöm a gyors segítséget!

Bye, Fifi

Hali,

Ha már ékezetekről van szó, megkérdezném:

Milyen módszerrel lehet eldönteni, hogy az az ékezet milyen kódkészlettel van kódólva? Történetesen letöltött mp3 fileok neveiben szereplő ékezetekkel van gondom, mivel dos-os környezetben kellene olvashatóvá tenni (az se gond ha nem lesz ékezet benne).

Akárhogy próbálkozok, sehogy se sikerül eltalálni a megfelelő készletet se recode, se iconv, se convm-el. :O

#cat menu.dat|recode utf8...latin2
"Invalid input in step `UTF-8..ISO-8859-2'"

#cat menu.dat|iconv -f utf8 -t iso8859-2
iconv: illegal input sequence at position 664

stb.

Előre is köszönöm
-----
icee

Milyen módszerrel lehet eldönteni, hogy az az ékezet milyen kódkészlettel van kódólva?

Szemrevételezéssel :) Ha tudod, hogy milyen nyelvű szöveget tartalmaz, megnézed egy egybájtos kódolású (pl. latin2-es) terminálon. Ha szerencséd van, minden ok. Ha az ékezetesek 2 karakterként jelennek meg, de a többi betű jó, akkor valószínűleg utf8. Ha az ékezetek helyett egy-egy másik karakter jelenik meg, akkor valami dos-os kódolás lehet jó eséllyel.

#cat menu.dat|iconv -f utf8 -t iso8859-2
iconv: illegal input sequence at position 664

Lehet, hogy jó az utf8, de tartalmazhat olyan karaktert, ami nincs a latin2-ben. Próbáld -c kapcsolóval.