Blog archive 2008/05

Hromadná změna kódování souborů v češtině

May| 8 2008

Pro hromadnou změnu kódování souborů existují některé prográmky. Mě se podařilo najít utilitku od Pavla Slezáka (http://www.slezak.name/pavel/kodovani.html), bohužel tento prográmek nepodporuje kódování UTF-8.

Skript v bashi

Hledal jsem dále. Na jiných stránkách (http://www.z-moravec.net/php_learn/hromadna-zmena-kodovani.php) je trochu jíný způsob - velmi jednoduchý kód pro bash.

for F in *.php
do
iconv -f windows-1250 -t utf-8 -o $F ${F}1
mv ${F}1 $F
done

Skript v Pythonu

Linux jsem ale zrovna nabootován neměl, tak jsem hledal dále. Již marně. Napadla mě ale jiná možnost - napsat si něco jednoduchého v Pythonu.

Níže je tedy uveden výsledek mého snažení, je to vcelku jednoduchý skript pro python (takže na počítači musí být nainstalován Python verze 2.4 a dále - http://www.python.org/). V budoucnu mu snad přibude nějaké GUI. Do té doby je to spíš taková inspirace.

import os

# seznam koncovek souboru, ktere maji byt prevedeny
extentions = ['php', 'html', 'htm']

# samotne prevedeni souboru
# @param string path soubor, ze ktereho se cte
# @param string path2 soubor, do ktereho je ukladano
def conv(path, path2):
f= open(path, 'rb')
content= unicode(f.read(), 'cp1250')
f.close()
f= open(path2, 'wb')
f.write(content.encode('utf-8'))
f.close()

# rekurzivne vola sama sebe od aktualniho adresare
# @param string path adresar, ktery je prohledavan
def chdir(path):
print '=======' + path + '======='
for fn in os.listdir(path):
if os.path.isfile(path + fn):
if fn.lower().split('.')[-1] in extentions:
print "converting... " + path + fn
conv(path + fn, path + fn)
elif os.path.isdir(path + fn):
chdir(path + fn + '/')

# inicializace pro aktualni adresar
chdir('')
Tags: Programování | Python | Počítače