Прочитав мануал к enca, я вспомнил о сабже и был удивлён выводом:
Universal transformation format 8 bits; UTF-8
Doubly-encoded to UTF-8 from ISO-8859-5
Раскодировав недавно эту «кодировку», я приступил к стандартизации...
И набыдлокодил:
#!/bin/bash
# Скрипт находит все ogg файлы в pwd-директории и перепиливает теги из поломаной
# кодировки типа Doubly-encoded to UTF-8 from ISO-8859-5 (enca) в юникод.
# vorbis-tools сами ставите
find . -type f -iname '*.ogg'|while read vorbisfile #Заряжаем цикл
do
vorbiscomment -Rl "$vorbisfile" > tmp
sed -e 's/\ /_/g' tmp > tnp # так я обхожу проблему с пробелами
noutf=0
for string in `cat tnp`
do
tagval=${string#*=}
tag=${string%%=*}
if [[ 1 -eq `echo $tagval|enca|grep "Doubly-encoded to UTF-8 from ISO-8859-5"|wc -l` ]]
#разведка тэгов на наличие неполиткоррекных кодировок
then
newtagval=`echo $tagval|iconv -f utf8 -t latin1|iconv -f cp1251`
# Да! Без оффтопа не обошлось
if [[ ${#newtagval} -ne 0 ]] # Если случай не клинический
then
noutf=1
sed -e "s/$tagval/$newtagval/" tnp > tmp
cp tmp tnp
fi
fi
done
if (( $noutf )) #без надобности файл трогать не будем
then
for tag in `cat tnp`
do
tag=`echo $tag|sed -e 's/_/\ /g'`
if (( $noutf )) # сначала теги переписываются, а потом добавляются
then
vorbiscomment -Rw "$vorbisfile" -t "$tag"
noutf=0
else
vorbiscomment -Ra "$vorbisfile" -t "$tag"
fi
done
fi
done
rm tmp tnp
Я уже скрипт запустил у себя и стало гораздо лучше, но без косяков не обошлось. Ещё мне неначем стало скрипт тестировать. Поэтому и публикую.