Kirjoittaja Aihe: Skandit ja ääkköset tiedostojen nimissä JA sisällössä (dos-breezy-dapper/UTF8)  (Luettu 7600 kertaa)

kko

  • Käyttäjä
  • Viestejä: 5
    • Profiili
Hei!

En ole ihan aloittelija linuxin käytössä, mutta aikojen saatossa kertyneiden tiedostojen merkistökoodaus on asia, jossa kaipaisin jonkun asiantuntevan vääntämänä jonkin verran rautalankaa. ;)

Kysymykseni ovat kahta laatua:
- Käytännön kysymykset liittyen breezystä dapperiin vaihdon jälkeisiin ääkkösongelmiin.
- Teoreettiset kysymykset merkistökoodaukseen ja UTF8:aan liittyen yleensä.
Koetan esittää kysymykseni mahdollisimman selkeässä muodossa. Aluksi vähän taustaa, kysymykset lopussa.

Taustaksi:
- Käytän (K)ubuntu Dapperia, aiemmin käytin (K)ubuntu Breezyä, jolta ajalta minulla on tallessa mm. tekstitiedostoja ja .rtf- sekä kasa muissa organisaatioissa windows-koneilla tuotettuja .doc-tiedostoja.
- Jossain kiintolevyn hämärissä sopukoissa on tallessa vielä dos-aikaisia tiedostoja, sekä sen aikaisia dos- ja windows-koneilla tuotettuja dokumentteja.
- Ongelmana on se, että paitsi tiedostojen nimissä (myös hakemistojen nimet), myös niiden sisällössä huomaa väärät koodaukset. (Nimien osalta - OOo:han ei edes löydä tällaisen polun päässä olevia tiedostoja.)

Käytän siis suurinpiirtein standardiasennusta (ja KDE:ssä suomea), käytössä on siis ohjelmasta riippuen sekakielinen suomi-englanti-asennus, breezyssäkään en mitään erityisiä asetuksia locale:n suhteen tietääkseni tehnyt. Locale-asetusten suhteen olen siis suhteellisen tietämätön (vaikka aina eri käyttöjärjestelmien välillä seilatessa olen ongelmiin törmännytkin), koska olen salaa toivonut, että voisin selvitä joutumatta perehtymään niihin ihan pultti & mutteri -tasolla (huoh...).

Dapperissa käytössä joka tapauksessa on UTF8 - käsky locale antaa seuraavan tulosteen:
Koodia: [Valitse]
LANG=fi_FI.UTF-8
LANGUAGE=fi_FI:fi:en_GB:en
LC_CTYPE="fi_FI.UTF-8"
LC_NUMERIC="fi_FI.UTF-8"
LC_TIME="fi_FI.UTF-8"
LC_COLLATE="fi_FI.UTF-8"
LC_MONETARY="fi_FI.UTF-8"
LC_MESSAGES="fi_FI.UTF-8"
LC_PAPER="fi_FI.UTF-8"
LC_NAME="fi_FI.UTF-8"
LC_ADDRESS="fi_FI.UTF-8"
LC_TELEPHONE="fi_FI.UTF-8"
LC_MEASUREMENT="fi_FI.UTF-8"
LC_IDENTIFICATION="fi_FI.UTF-8"
LC_ALL=

Lähimmäksi aihetta forum-haussa osuivat nämä aiheet:
http://forum.ubuntu-fi.org/index.php?topic=4321.0
http://forum.ubuntu-fi.org/index.php?topic=11797.0

Lisäksi tietysti tiedän Finnish HowTo:n:
http://www.arska.org/finnish-howto/html/

Ja UTF-8:n perustiedot löytyvät täältä:
http://en.wikipedia.org/wiki/UTF-8


No niin, nyt niitä kysymyksiä. Näillä on siis kaksi tarkoitusta - ensinnä selvittää käytännön pulmia, ja toiseksi lisätä ymmärrystä taustalla toimivista mekanismeista (pultit & mutterit).

1. Tiedostojen uudelleen nimeäminen ratkaisee ongelman nimien osalta. Onko tähän olemassa käytännöllistä automatiikkaa, joka tunnistaa, mitkä tiedostot vaativat uudelleen nimeämistä?
2. Tiedostojen sisällön osalta - koskevatko koodausongelmat pelkästään tekstitiedostoja ja html:ää & vastaavia (eli mitä)?
3a. Toisin sanoen, ovatko .rtf- ja .doc-muotoiset tiedostot vapaita tästä väärän sisällön ongelmasta? (Luulin törmänneeni johonkin koodausongelmaan tällaisenkin osalta, mutta nyt testatessani OOo avasi kyllä vanhatkin tiedostot oikein, kunhan ne eivät olleet väärin nimetyn polun takana, mistä se ei niitä löydä.)
3b. Vai onko näissäkin aina jokin koodaus, mutta uusin OOo vain osaa automaattisesti lukea ne sisään oikealla koodauksella?
4a. Asiallinen työkalu  nykysysteemissä virheellisenä näkyvien tiedostojen (sisällön!) käsittelyyn lienee recode?
4b. Recode käsittelee ilmeisesti yhden tiedoston kerrallaan? (Ts. jos haluaa käsitellä useampia, täytyy ne syöttää sille esim. jollain skriptillä?)
5a. Mistä tiedän, mikä koodaus tiedostossa alunperin on? (Tarvitseeko minun tietää se? Oletettavasti eli ymmärtääkseni tarvitsee.)
5b. Jos tarvitsee, mikä olisi käytännöllinen tapa lukea tiedostoa eri koodauksilla, jotta näen, mikä osuu oikeaan?
6. Onko kenelläkään kokemuksia tiedostojen käsittelystä ohjelmalla utf8-migration-tool? Toimiiko se, ja onko se käytännöllinen?

Vastauksista jo etukäteen kiittäen.

kko

EDIT: Itseasiassa tiedostojen merkistökoodauksia ja niiden muuntamista koskeva HOWTO eli opas, joka vastaisi näihin kysymyksiin, olisi kyllä ihan aiheellinen. Lisäsin sitä koskevan toiveen Oppaat-foorumille: http://forum.ubuntu-fi.org/index.php?topic=5743.msg91128#msg91128.
« Viimeksi muokattu: 16.09.07 - klo:14.54 kirjoittanut kko »

ilkkak

  • Käyttäjä
  • Viestejä: 405
    • Profiili
Ihan on samojen juttujen kanssa painiskeltu useaan otteeseen.


1. Tiedostojen uudelleen nimeäminen ratkaisee ongelman nimien osalta. Onko tähän olemassa käytännöllistä automatiikkaa, joka tunnistaa, mitkä tiedostot vaativat uudelleen nimeämistä?


http://www.j3e.de/linux/convmv/man/
http://packages.ubuntu.com/gutsy/utils/convmv - pitäisi löytyä universe lähteestä

esim  .
convmv -f iso-8859-1 -t utf-8 filename

2. Tiedostojen sisällön osalta - koskevatko koodausongelmat pelkästään tekstitiedostoja ja html:ää & vastaavia (eli mitä)?

sed s/ä/\&auml\;/g  input_file >> outputfile

Voin laittaa scriptin, jolla muutetaan kaikki skandit hakemistopuusta kunhan joudan takaisin työpaikalle. Ilmoittele jos tarvitset

3a. Toisin sanoen, ovatko .rtf- ja .doc-muotoiset tiedostot vapaita tästä väärän sisällön ongelmasta? (Luulin törmänneeni johonkin koodausongelmaan tällaisenkin osalta, mutta nyt testatessani OOo avasi kyllä vanhatkin tiedostot oikein, kunhan ne eivät olleet väärin nimetyn polun takana, mistä se ei niitä löydä.)

3b. Vai onko näissäkin aina jokin koodaus, mutta uusin OOo vain osaa automaattisesti lukea ne sisään oikealla koodauksella?



Käsittääkseni kyllä. Tiedostot sisältävät avaimen,jossa käytetty merkkikoodaus on ilmoitettu. niiden kanssa ei ole ollut ongelmia


4a. Asiallinen työkalu  nykysysteemissä virheellisenä näkyvien tiedostojen (sisällön!) käsittelyyn lienee recode?

?? ei kokemusta


4b. Recode käsittelee ilmeisesti yhden tiedoston kerrallaan? (Ts. jos haluaa käsitellä useampia, täytyy ne syöttää sille esim. jollain skriptillä?)

Joo - voin laittaa skriptin jos huomenna maanataina vielä tarvetta.


5a. Mistä tiedän, mikä koodaus tiedostossa alunperin on? (Tarvitseeko minun tietää se? Oletettavasti eli ymmärtääkseni tarvitsee.)

Avaa esim. katella. Avaa työkalut -> koodaus

Toivottavasti oli apua. recoden osalta auttaa http://linux.fi/index.php/Unicode. En ole käyttänyt mutta näyttäisi näppärältä peliltä

kko

  • Käyttäjä
  • Viestejä: 5
    • Profiili
Kiitos vastauksesta. Lyhyet kommentit:

convmv - juu, tuohon olinkin jossain vaiheessa jo törmännyt (utf8-migration-tool:in lisäksi) apt-cache search:illa mahdollisuuksia kaivellessani (ja sittemmin unohtanut). Kiitos.
kate - totta, tuoltahan tuo löytyi kätevästi valikosta.
linux.fi:n Unicode-sivu (http://linux.fi/index.php/Unicode) - kiitos linkistä.

Vielä kohtaan 2 - lähinnä minulla on kyse tekstitiedostoista. Voi olla, että joku (hyvin satunnainen) html-sivu on löytynyt joukkoon.

Kaikki hakemistopuun alla sijaitsevat tekstitiedostot asianmukaisesti käsittelevät skriptit ovat toki tervetulleita niin huomenna kuin myöhemminkin.

Vastauksia saa tähän ketjuun tietysti lähettää lisääkin. Jos vaikka tieto lisääntyisi ja tiivistyisi yhteen paikkaan, niin olisi sitten aineksia siihen mainittuun aihetta käsittelevään oppaaseenkin. ;)

kko
« Viimeksi muokattu: 16.09.07 - klo:22.00 kirjoittanut kko »

jemaku

  • Käyttäjä
  • Viestejä: 328
    • Profiili
Yksi lisäkysymys: Onko rikkinäiset tiedostonimet ext3-levyllä vai jollain vanhalla fat/ntfs-osiolla?
Jos ne on winkkarin jäljiltä winkkari-osiolla, niin ääkköset on oikein, ja ne saa linuxiinkin oikein kun osaa mountata.
Taustatietoa: http://groups.google.fi/group/sfnet.atk.linux/browse_frm/thread/b6e22215d32d866e/
(Teemu Likosen kommentit!)

Htmlään en lähtisi korvaamaan ääkkösiä ääkkös-sotkulla... Mieluummin oikea content type  tiedostoon ja serverin asetukset kuntoon...

Itse en ole joutunut noiden konvertointiohjemien kanssa tekemisiin, niistä en sano mitään.
(Laiskan lähestymistapa olisi tietty että alkaa miettiä vanhojen tiedostojen merkistökoodauksia siinä vaiheessa kun niitä tekstejä tarvitaan... Kaikki editorit kuitenkin osaa kaikkia koodauksia lukea.)

kko

  • Käyttäjä
  • Viestejä: 5
    • Profiili
Juu, kiitos, ihan hyvä tarkennus. Ext2/3:lla siis ovat (osin kuten todettya breezysta, mutta myös vanhemmat siirretty ext-osioille aikanaan). Fat-osiot osaisin tod. näk. tarvittaessa mountata asianmukaisiin vivuin.

Lainaus
(Laiskan lähestymistapa olisi tietty että alkaa miettiä vanhojen tiedostojen merkistökoodauksia siinä vaiheessa kun niitä tekstejä tarvitaan... Kaikki editorit kuitenkin osaa kaikkia koodauksia lukea.)

Periaatteessa ehkä näinkin, mutta vaikka laiskuutta toisinaan kannatankin, ajattelin välttää tätä lähestymistapaa. Voisi käydä niin, että laiska joutuisi tässä tapauksessa näkemään enempi vaivaa kuin jos hoitaisi kerralla homman kuntoon. ;)

Motivaationa tällä kertaa ryhtyä merkistökoodauksia selvittämään on (varmuuskopiointiakin selkeyttävä) ajatus selvittää, luokitella ja järjestää vanhat tiedostot eri ajoilta yhden loogisen hakemistopuun alle, josta arkistoidutkin tiedot järkevästi jollain logiikalla löytää (hakumoottoria käyttämättäkin). (Tiedon lajittelu helposti löydettäväksi, vaikkapa tietokantoja hyödyntäen, on oma tieteenalansa sinänsä, niin ei mennä siihen aiheeseen tässä.) Tässä tarkoituksessa on käytännöllistä, jos saman hakemistopuun alla kaikki tiedostot näkyvät nätisti ilman, että joka toisen kohdalla erikseen täytyy kikkailla koodausta kohdalleen editorissa - yleisin lukuohjelma monille tekstin sirpaleille kuitenkin taitaa meikäläisellä olla tuo less...

kko
« Viimeksi muokattu: 16.09.07 - klo:22.05 kirjoittanut kko »

ilkkak

  • Käyttäjä
  • Viestejä: 405
    • Profiili
Meinas jo unohtua. Tässä se skripti. Korjatkaa mielenne mukaan:

Koodia: [Valitse]
#!/bin/bash
# listataan annetun kansion sisalto
# kansion osoite tulee parametrissa 1

# onko annettu kansionimi kansio vai tiedosto?

#if [ $4 != "1" ]
#then
#  echo  "Haluat siis muuttaa kaikki tiedostot (rekursiivisesti) kansiossa " $1 "
#  read inputvariable
#fi

if [ -d "$1" ]
then
# listataan kansion sisalto

  echo  Kansio $1

  for tiedosto in $1/*
  do
    if [ -d "$tiedosto" ]

    then

      ./merkkijonomuutos "$tiedosto" $2 $3

    else

      if [ "${tiedosto##*.}" = "htm" ]
      then
        echo Tiedosto "$tiedosto" : "$2" -- "$3"

        sed 's/ö/\&ouml\;/g' "$tiedosto" >>"$tiedosto.tmp"
        rm -f "$tiedosto"
        mv -f "$tiedosto.tmp" "$tiedosto"

        sed 's/ä/\&auml\;/g' "$tiedosto" >>"$tiedosto.tmp"
        rm -f "$tiedosto"
        mv -f "$tiedosto.tmp" "$tiedosto"

        sed 's/Ö/\&Ouml\;/g' "$tiedosto" >>"$tiedosto.tmp"
        rm -f "$tiedosto"
        mv -f "$tiedosto.tmp" "$tiedosto"

        sed 's/Ä/\&Auml\;/g' "$tiedosto" >>"$tiedosto.tmp"
        rm -f "$tiedosto"
        mv -f "$tiedosto.tmp" "$tiedosto"

      fi

      if [ "${tiedosto##*.}" = "html" ]
      then
        echo Tiedosto "$tiedosto" : "$2" -- "$3"

        sed 's/ö/\&ouml\;/g' "$tiedosto" >>"$tiedosto.tmp"
        rm -f "$tiedosto"
        mv -f "$tiedosto.tmp" "$tiedosto"

        sed 's/ä/\&auml\;/g' "$tiedosto" >>"$tiedosto.tmp"
        rm -f "$tiedosto"
        mv -f "$tiedosto.tmp" "$tiedosto"

        sed 's/Ö/\&Ouml\;/g' "$tiedosto" >>"$tiedosto.tmp"
        rm -f "$tiedosto"
        mv -f "$tiedosto.tmp" "$tiedosto"

        sed 's/Ä/\&Auml\;/g' "$tiedosto" >>"$tiedosto.tmp"
        rm -f "$tiedosto"
        mv -f "$tiedosto.tmp" "$tiedosto"

      fi

      if [ "${tiedosto##*.}" = "HTML" ]
      then
        echo Tiedosto "$tiedosto" : "$2" -- "$3"

        sed 's/ö/\&ouml\;/g' "$tiedosto" >>"$tiedosto.tmp"
        rm -f "$tiedosto"
        mv -f "$tiedosto.tmp" "$tiedosto"

        sed 's/ä/\&auml\;/g' "$tiedosto" >>"$tiedosto.tmp"
        rm -f "$tiedosto"
        mv -f "$tiedosto.tmp" "$tiedosto"

        sed 's/Ö/\&Ouml\;/g' "$tiedosto" >>"$tiedosto.tmp"
        rm -f "$tiedosto"
        mv -f "$tiedosto.tmp" "$tiedosto"

        sed 's/Ä/\&Auml\;/g' "$tiedosto" >>"$tiedosto.tmp"
        rm -f "$tiedosto"
        mv -f "$tiedosto.tmp" "$tiedosto"

      fi

      if [ "${tiedosto##*.}" = "HTM" ]
      then
        echo Tiedosto "$tiedosto" : "$2" -- "$3"

        sed 's/ö/\&ouml\;/g' "$tiedosto" >>"$tiedosto.tmp"
        rm -f "$tiedosto"
        mv -f "$tiedosto.tmp" "$tiedosto"

        sed 's/ä/\&auml\;/g' "$tiedosto" >>"$tiedosto.tmp"
        rm -f "$tiedosto"
        mv -f "$tiedosto.tmp" "$tiedosto"

        sed 's/Ö/\&Ouml\;/g' "$tiedosto" >>"$tiedosto.tmp"
        rm -f "$tiedosto"
        mv -f "$tiedosto.tmp" "$tiedosto"

        sed 's/Ä/\&Auml\;/g' "$tiedosto" >>"$tiedosto.tmp"
        rm -f "$tiedosto"
        mv -f "$tiedosto.tmp" "$tiedosto"

      fi
    fi

  done

else

    echo kaytto: ./merkkijonomuutos aloituskansio

fi


kko

  • Käyttäjä
  • Viestejä: 5
    • Profiili
Ylläoleva skripti siis muuttelee html-tiedostoissa merkit äöÄÖ, mutta oletettavasti edellyttää, että ne tiedostot ovat jo oikealla merkistökoodauksella.

Menee siis hiukan alkuperäisen aiheen eli merkistökoodauksen viereen, mutta kiitos kuitenkin vaivannäöstä.

Alkuperäisiin kysymyksiin (erityisesti 2, 4ab ja 6, muihinkin jos on tarkennuksia tai lisäyksiä) vastaukset tervetulleita edelleen. ;)

kko
« Viimeksi muokattu: 26.09.07 - klo:14.40 kirjoittanut kko »

ilkkak

  • Käyttäjä
  • Viestejä: 405
    • Profiili
Ylläoleva skripti siis muuttelee html-tiedostoissa merkit äöÄÖ, mutta oletettavasti edellyttää, että ne tiedostot ovat jo oikealla merkistökoodauksella.

Menee siis hiukan alkuperäisen aiheen eli merkistökoodauksen viereen, mutta kiitos kuitenkin vaivannäöstä.

Alkuperäisiin kysymyksiin (erityisesti 2, 4ab ja 6, muihinkin jos on tarkennuksia tai lisäyksiä) vastaukset tervetulleita edelleen. ;)

kko


Joo - ymmärrän yskän. Laita komentotulkkiin ajon ajaksi Asetukset - > Merkkimuunnos -> iso8859-1, niin skripti toimii.