UTF-8 karakterek keresése szövegfájlban

Sziasztok,

legyen egy túlnyomórészt ASCII karaktereket tartalmazó angol nyelvű fájl. Viszont véletlenül belekeveredik egy-két UTF-8-as karakter (pl. sima kötőjel helyett UTF-8-as gondolatjel, vagy sima aposztróf helyett UTF-8-as 9es alakú aposztróf)... a fájlt UTF-8as kódolással mentem el, tehát "cat file.txt" hatására úgy látszik, mintha csak ASCII karakterek lennének benne. A kérdésem az lenne, hogy hogyan lehetne megszűrni ezt a fájlt az UTF-8 karakterektől? Tehát valamilyen program vagy script, amely csak a "nem ASCII" karaktereket printelné ki a fájlból.

kösz.

Hozzászólások

Valami ilyesmire gondoltal?


nyos@hex:~/src$ cat ./utfchars.c 
#include <stdio.h>

int main()
{
  int c;
  while(EOF!=(c=getchar()))
    if(c&0x80)
      putchar(c);
  return 0;
}
nyos@hex:~/src$ ./utfchars 
árvíztűrő tükörfúrógép
áíűőüöúóé

szerk: egyebkent iconv tud transliterate modon konvertalni, szoval valamivel kozeliti amit nem tamogat a cel kodolasa

--
+++ Divide By Cucumber Error. Please Reinstall Universe And Reboot +++

szuper, pontosan erre gondoltam.. először úgy gondoltam, hogy megyek sorba, és kitörlöm az összes ASCII karaktert, amelyek szerepelhetnek a fájlomban, valahogy így:

cat file.txt | tr -d 'a-zA-Z0-9' | tr -d '# @%' | tr -d '..........

aztán mindjárt el is vetettem, mert az jutott eszembe, hogy, mi van, ha az UTF-8 láncból szedek ki valamilyen karaktert.... tehát tévesen azt hittem, hogy csak az első bájtjára kell teljesülni, hogy > 0x7F.... szóval egy UTF-8 karakter minden bájtja a kiterjesztett kódtáblából kell, hogy legyen?

amúgy a Te megoldásod sokkal elegánsabb, és kifejezőbb, mint az enyém lett volna.. meghát gyorsabb is, mint "tr" programokat hívni....

hát csak párszor már megjártam, amikor túl sok speciális karaktert pakoltam a "tr" proginak... tudom, hogy a kötőjelre meg a tetőjelre más szabályok vonatkoznak... vagy például aposztrófok között nem tudok aposztrófot megadni.... szóval igazad van, csak rossz szokásból...

Ahány tr, annyi fajta viselkedés, de elvileg az lenne az igazán jó (nem tudom hogy így van-e), ha az alnum és társai bizony illeszkednének az UTF-8-as alfanumerikus cuccokra. Tehát te pont nem ezt akarod.

Szerk.: És ugyanemiatt az a-z típusú intervallumok is cinkesek, hiszen beüt a locale, amelyik átdefiniálja a sorrendet, például az a és b közé bejöhet az á. Szóval ha tutira akarsz menni, írd ki végig hogy abcdefgstb...

echo Árvíztűrő tükörfúrógép | perl -pe 's/[\000-\177]//g'
echo Árvíztűrő tükörfúrógép | perl -pe 'tr/\000-\177//d'