Переходим на UTF-8
Для начала проясню следующий момент - операционке глубоко пофигу на то, какая кодировка у пользователя и его файлов. Ей дали имя файла в определенной кодировке - она тупо создает файл с таким именем, опираясь на коды символов.
1. Настраиваем UTF-8 у юзера
В файле /etc/login.conf по аналогии с классом russian добавить russian_utf8:
russian-utf8|Russian Users Accounts UTF8:\
:charset=UTF-8:\
:lang=ru_RU.UTF-8:\
:lc_all=ru_RU.UTF-8:\
:tc=default:
Далее строим из этого файла бинарник: cap_mkdb /etc/login.conf
Теперь нужно прописать пользователю данный логин-класс:
pw usermod <user_name> -L russian-utf8
2. Файлы с кириллическими именами
Если у нас были файлы с именами на кириллице, то нам необходимо перекодировать такие имена в UTF-8 - для этого я воспользовался утилиткой /usr/ports/converters/convmv
Если у нас имена на диске были в KOI8-R, то воспользуемся утилиткой вот так:
convmv -f KOI8-R -t UTF-8 --notest -r /home/sharedocs/*
Пока все.
(инфа найдена тут - http://www.bsdnotes.ru/?lnk=sys_utf8)
Да, еще порой докучают ^M в файлах с винды. Избавляемся так: col -b < in_file > out_file
Если нужно каталог:
find -E /path/to/catalog -type f -regex '.*(htm|html|php|ini|txt)$' | xargs -n 1 ./tmp
Файл tmp:
#!/bin/bash
col -b < $1 > tmp.file
cp tmp.file $1
3. MySQL
Очень подробно и хорошо по этому поводу было написано тут. В общем, придется своими словами.
Задача: конвертировать БД из latin1 (внутри cp1251) в UTF8.
#!/bin/sh
DATE=`date "+%Y-%m-%d"` DB='somedb'
mysqldump --add-drop-table --no-autocommit --default-character-set=latin1 --databases ${DB} > ${DATE}_${DB}.sql
iconv -f CP1251 -t UTF-8 ${DATE}_${DB}.sql > ${DATE}_${DB}_utf8.sql
sed 's/ENGINE=InnoDB DEFAULT CHARSET=latin1/ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci/g;s/latin1/utf8/g' < ${DATE}_${DB}_utf8.sql > ${DATE}_${DB}_utf8_sed.sql
mysql -u user -p password < ${DATE}_${DB}_utf8_sed.sql