30 июн. 2010 г.

Перекодировка выгрузок клиент-банка на лету (iconv + incrond)

Думал, что писал об этом, а оказалось, что думал о том, чтобы написать ;) Так или иначе, имеется небольшой скриптик, который в связке с когда-то упомянутым incron'ом занимается перекодировкой (практически "на лету") выгружаемой информации из клиент-банка из UTF-8 в CP-1251 для последующей загрузки оной в 1Сv8.1.
Создать его пришлось вследствие нежелания 1С-ки кушать выгруженные из клиент-банка (java-апплет ibank2, доступ через Firefox) данные, ибо они отдаются и сохраняются в UTF-8, тогда как 1C-ка (запущена под Wine@Etersoft) понимает только CP-1251.
Описанный костыль работает следующим образом: демоном incrond мониторится папочка:
incrontab -l
/exchange/банк/экспорт IN_CLOSE_WRITE /usr/local/bin/bank_tr_ex.sh $#
Как только в ней сохраняется файл (флаг IN_CLOSE_WRITE), запускается скрипт bank_tr_ex.sh:

#!/bin/bash

ICONV=/usr/bin/iconv
DIR=/home/exchange/банк/экспорт
OLDDIR=/home/exchange/банк/экспорт/old
FILE="$@"
ENC=`enca -i $DIR/$FILE`

if [ "$ENC" == "UTF-8" ]; then
        #echo $FILE
        sleep 1
        mv $DIR/$FILE $OLDDIR/$FILE.utf
        $ICONV -o $OLDDIR/$FILE -f UTF-8 -t CP1251 $OLDDIR/$FILE.utf
        mv $OLDDIR/$FILE $DIR/$FILE
fi
Задача скрипта: забекапить загруженный файл ($FILE.utf), транскодировать его в CP1251, подсунуть перекодированный файл вместо изначального.
После этого 1С-ка кушает выгрузку за милую душу ;)