Fórum Ubuntu CZ/SK
Ostatní => Archiv => Téma založeno: Vašek 18 Června 2006, 21:33:51
-
Ahoj, nevíte někdo, jaký lze použít program na převod sobourů z jednoho kódování na UTF-8?
-
iconv -f vstupni_kodovani -t vystupni_kodovani < vstupni_soubor > vystupni_soubor
vic ti poradi "man iconv" ;-)
-
Z manuálu jsem to pochopil, ale nevím jak tam zadat ten soubor. Dejme tomu, že mám soubor v home/agape/desktop a jmenuje se czechiso.php a chci ho změnit na soubor s kódováním utf8, tak zadám do terminálu:
iconv -f iso -t utf8 ........ a teď jsem v koncích, páč nevím, jak tam zadat ten soubor a taky jsem v manuálu nenašel oficiální tvary kódování a nejsem si jistý tím iso, jestli to tak stačí a jestli dát utf-8 nebo utf8. Ptám se polopatě, ale snad je to z toho alespoň jasný.
Jinak díky, že mi to píšeš jako lamovi viz : vic ti poradi "man iconv" ;-) tak alespoň nemusím tápat, o čem se vlastně mluví :-)
-
V manualove strance se muzes docist, ze vypis vsech kodovani dostanes prikazem iconv -l
program funguje nasledovne:
iconv -f from -t to [soubor] (hranatky znamena, ze parametr je volitelny)
Program prevede soubor z kodovani "from" do kodovani "to". Pokud neni zadan parametr "soubor", tak se cte z tzv. standardniho vstupu (tj z klavesnice), jinak ze souboru s nazvem "soubor". Vystup jde na standardni vystup (tj. na obrazovku)
Jak uz ted vis, tak misto standardniho vstupu muzes cist ze souboru pomoci parametru, ale jde to i jinak. Obecne u vsech UNIXovych programu, ktere neco ctou a neco pisou (napr. iconv, tr, grep, awk,...) muzes presmerovat standardni vstup a standardni vystup z a do souboru.
> znaci presmerovani vystupu
< znaci presmerovani vstupu
takze v tvem pripade bude vypadat prikaz takto:
iconv -f iso-8859-2 -t UTF-8 /cesta/k/souboru > vysledny_soubor
timto :"> vysledny_soubor" tedy presmerujes vysledek prevodu do noveho souboru
!Pozor! musi to byt ruzny nazev od zdrojoveho souboru, jinak ztratis veskera data v tom souboru. Takze pak budes muset (pokud to bude nutne) smazat/zalohovat ty puvodni soubory a prejmenovat ty nove.
Jo a jeste ted jsem si vzpomnel. Vysledny soubor nemusis zadat jenom pomoci presmerovani, ale jde to i pres parametr "-o"
-
Jinak tady jsem vytvoril takovy mensi skriptik (neni jeste odskouseny, ale vypada to, ze by to melo fungovat ;-) ). Uloz ho do adresare, kde chces konvertovat soubory treba jako skript.sh. Spusti se prikazem "sh skript.sh" Program prevede vsechny soubory v adresari z kodovani iso-8859-2 do kodovani utf-8 a take vytvori zalohu tech puvodnich v adresari backup/. Pokud nechces zalohovat, tak smaz radek "mkdir backup" a radek "mv $prom backup/" prepis na "rm $prom". Pokud bys chtel jeste univerzalnejsi skript, tak prepis v radku, kde se vola iconv "iso-8859-2" na $1 a "utf-8" na $2. Potom se bude konvertovat z kodovani, ktere bude zadane jako prvni parametr skriptu do kodovani, ktere bude zadane jako druhy parametr skriptu.
Napriklad takto: sh skript.sh utf-8 cp1250
#!/bin/sh
mkdir backup
for prom in `ls`
do
if [ $prom != $0 ]
then
if [ -f $prom ]
then
pom=`echo tmp_$prom`
iconv -f iso-8859-2 -t utf-8 $prom -o $pom
mv $prom backup/
mv $pom $prom
fi
fi
done
-
Super, díky :-) Všechno z toho chápu, ale stejně někde dělám chybu
agape@vashek:~$ iconv -f iso-8859-2 -t UTF-8 /home/agape/desktop/joomla/kodovani/czechiso.php > czechutf.php
iconv: vstupní soubor `/home/agape/desktop/joomla/kodovani/czechiso.php' nelze otevřít: není souborem ani adresářem
To samé s tím skriptíkem, btw moc pěknej jestli bude frčet .....
agape@vashek:~$ sh skript.sh /home/agape/desktop/joomla/kodovani
sh: skript.sh: není souborem ani adresářem
agape@vashek:~$
agape@vashek:~$ sh skript.sh /home/agape/desktop/joomla/kodovani/skript.sh
sh: skript.sh: není souborem ani adresářem
-
No.... ted jsem v praci pod win, tak si s tim skriptem moc nepohraju.
Nezapomen ze UNIXy rozlisuji VelKa a MAla pIsmenA v nazvech souboru a adresaru! Ja si tohle kontroluji pri zadavani v prikazove radce nasledovne:
nezadam cely nazev, ale prvnich par pismenek a pak zmacknu klavesu . Pokud to jde tak mi to automaticky doplni jmeno souboru/adresare, v opacnem pripade to nabidne (na nekterych systemech po dvojtem stisknuti tabulatoru) seznam vsech souboru a adresaru, ktere vyhovuji. Takze ten parametr, ktery predstavuje nazev souboru zadas treba takhle:
/ho ag De ....
!!!Jo, tady muze byt chybka... Adresar Desktop je podle me na Ubuntu s velkym D na zacatku.
A jeste k tomu skriptu: tomu se nezadava jako parametr adresar, jehoz soubory chces editovat, ale pokud, si ho nezmenil, tak zadny parametr nema. On prevadi soubory v aktualnim adresari. Pokud bys chtel teda soubory prevest ve vice adresarich tak je nejlepsi volba ulozit si ho treba do adresare ~/MySkripts/kodovani.sh
(Vlnovkou se v Unixech znaci domovsky adresar aktualniho uzivatele)
no a pak prejdes v prikazove radce do adresare, kde mas soubory pro prevod a napises "sh ~/MySkripts/kodovani.sh"
Tak jen doufam, ze te to zdlouhave reseni docela banalniho problemu od Linuxu neodradi a treba si sam neco nastudujes o skriptovani v prikazove radce ;-)
-
To samé s tím skriptíkem, btw moc pěknej jestli bude frčet .....
agape@vashek:~$ sh skript.sh /home/agape/desktop/joomla/kodovani
sh: skript.sh: není souborem ani adresářem
agape@vashek:~$
agape@vashek:~$ sh skript.sh /home/agape/desktop/joomla/kodovani/skript.sh
sh: skript.sh: není souborem ani adresářem
Pokud mas ten script v ~ a jsi v adresari ~, tak ho musis spoustet ./skipt.sh (tim ./ mu reknes, ze ten program je v aktualnim adresari, jinak ho hleda v adresarich uvedenych v promene PATH).
-
To samé s tím skriptíkem, btw moc pěknej jestli bude frčet .....
agape@vashek:~$ sh skript.sh /home/agape/desktop/joomla/kodovani
sh: skript.sh: není souborem ani adresářem
agape@vashek:~$
agape@vashek:~$ sh skript.sh /home/agape/desktop/joomla/kodovani/skript.sh
sh: skript.sh: není souborem ani adresářem
Pokud mas ten script v ~ a jsi v adresari ~, tak ho musis spoustet ./skipt.sh (tim ./ mu reknes, ze ten program je v aktualnim adresari, jinak ho hleda v adresarich uvedenych v promene PATH).
Coz neni uplne pravda, nebot ho spousti prikazem "sh skript.sh"
prikazem "./skript.sh" by si jej mohl spustet za predpokladu, ze by byl spustitelny,
tj, pred jeho spustenim bys musel napsat "chmod +x skript.sh"
Podle me byla pricina nenalezeni sktiptu v tom, ze si Vashek sice nakopiroval ten skript do adresare, kde chtel ty soubory prevest, ale chtel ho spustit primo z domovskeho adresare. To se omlouvam, tohle jsem nezduraznil: Kdyz chces ten skript spustit jenom prikazem "sh skript.sh", tak se musis nachazet v adresari, kde ten soubor primo lezi
-
hups toho jsem si nevsim :oops:
-
Klaudy, díky za podrobné vysvětlení, převádět už umím a i něco málo navíc :-) Problém vyřešen.
-
Jinak tady jsem vytvoril takovy mensi skriptik (neni jeste odskouseny, ale vypada to, ze by to melo fungovat ;-) ). Uloz ho do adresare, kde chces konvertovat soubory treba jako skript.sh. Spusti se prikazem "sh skript.sh" Program prevede vsechny soubory v adresari z kodovani iso-8859-2 do kodovani utf-8 a take vytvori zalohu tech puvodnich v adresari backup/. Pokud nechces zalohovat, tak smaz radek "mkdir backup" a radek "mv $prom backup/" prepis na "rm $prom". Pokud bys chtel jeste univerzalnejsi skript, tak prepis v radku, kde se vola iconv "iso-8859-2" na $1 a "utf-8" na $2. Potom se bude konvertovat z kodovani, ktere bude zadane jako prvni parametr skriptu do kodovani, ktere bude zadane jako druhy parametr skriptu.
Napriklad takto: sh skript.sh utf-8 cp1250
#!/bin/sh
mkdir backup
for prom in `ls`
do
if [ $prom != $0 ]
then
if [ -f $prom ]
then
pom=`echo tmp_$prom`
iconv -f iso-8859-2 -t utf-8 $prom -o $pom
mv $prom backup/
mv $pom $prom
fi
fi
done
Tento skript jsem vyzkoušel a mohu ho všem doporučit - funguje opravdu skvěle. Před převodem je potřeba ho nakopírovat do daného adresáře např. "wintexty", kde jsou texty v jiném kódování. Pak se v Konsoli/Terminálu přepnout do adresáře a spustit ho přímo tam příkazem sh:
armada@armada:~$ cd wintexty
armada@armada:~/wintexty$ sh skript.sha skript provede překódování všech textových souborů, které zde máte. Složku Backup, kterou skript vytvoří, si raději nechte ve složce, nevíte, kdy se bude hodit!
-
..ano, jiste funguje skvele, jedina vyhrada budiz:
http://en.wikipedia.org/wiki/Spaghetti_code
;) -- i kdyz to take neni presne uplne ono: jsem zvyklej cist v ruznym kodu, ale tenhle me zaujal, pac jsem se i pres jeho trivialitu musel zamyslet nad tim, jak funguje.. (neni to videt na prvni pohled)
je to asi blbost a nechci prudit, ale tohle vypada jinak:
#!/bin/sh
mkdir backup
for prom in `ls`; do
if [ $prom != $0 ]; then
if [ -f $prom ]; then
pom=`echo tmp_$prom`
iconv -f iso-8859-2 -t utf-8 $prom -o $pom
mv $prom backup/
mv $pom $prom
fi
fi
done
-
Jeste bych doplnil, ze na prevod mezi kodovanimi lze pouzit take program cstocs, ktery pouzivam k plne spokojenosti. Dokaze take z textu odstranit diakritiku (prevod do ascii). Vlastni skripty je vhodne umistit do jednoho adresare, napr. do adresare ~/bin a pridat si tuto cestu do promenne PATH, takze pak jiz neni nutne se na skript odkazovat absolutni cestou, ale pouze jmenem (tak jako normalni prikazy). Skript samozrejme musi byt spustitelny.