Переходим на 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} &gt; ${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