На вопрос какую кодировку лучше использовать? Ответ простой - выбирайте unicode, не ошибетесь! Это универсальный стандарт, символы выглядят одинаково везде и вы навсегда избавитесь от проблемы подбора правильной кодовой страницы и кракозябр.
А для совместимости со старыми однобайтовыми кодировками придуман формат UTF-8 (Unicode transformation format).
По сути это ничто иное, как 8-битная форма записи юникода. Но позвольте, скажете вы, как же так? В юникоде около 110 000 разных символов, как они кодируются одним байтом? Давайте разбираться.
На самом деле не одним байтом. Здесь разные символы кодируются разным числом байтов, в зависимости от их кода или порядкового номера. Как мы знаем, символы ASCII, кодируется всего 7 битами. И в юникоде они располагаются первыми. Поэтому, если байт начинается с 0, то это является признаком ASCII и символ кодируется только одним байтом.
0aaa aaaa
Но если символ имеет код больше 7 битов (128), то для его кодирования приходится использовать второй байт. Для этого в начале первого байта ставится признак "110" - две единицы, это значит два байта и ноль, как признак завершения кода размера. Второй байт обязательно начинается с "10" - это признак продолжения.
Пример, имеем двухбайтовый символ110x xxxx 10xx xxxx
[11010000] [10011110]
, отбрасывая признаки, получаем 10000011110 = 0x41E
, это символ большая кирилическая О.Если код символа занимает больше 11 бит (2048), то ставится признак
"1110"
и используют третий байт, в начале которого так же ставят признак продолжения "10"
.1110 xxxx 10xx xxxx 10xx xxxxИ так далее до 6 байт.
Вот такой простой принцип кодирования.
Но на Freebsd почему то все еще используется KOI8-R. Поэтому после того, как вы осознали пользу от Unicoda, давайте установим ее в качестве локали. Но пользоваться ею нормально можно будет только в удаленной консоли, например по ssh. В системной это не будет работать!
Если вы используете шелл по умолчанию, то для обычных пользователей это sh, а для root - csh.
Что бы узнать свое окружение дайте команду
# echo $shellили посмотрите в
/etc/passwd
Для смены кодировки
csh
достаточно в файле /etc/csh.cshrc
прописать переменныеsetenv LANG ru_RU.UTF-8Для
setenv LC_CTYPE ru_RU.UTF-8
setenv LC_COLLATE POSIX
setenv LC_ALL ru_RU.UTF-8
bash
в файле /etc/profile
дописываемLANG="ru_RU.UTF-8"; export LANGПереподключайтесь и любуйтесь русскими символами!
LC_CTYPE="ru_RU.UTF-8"; export LC_CTYPE
LC_COLLATE="POSIX"; export LC_COLLATE
LC_ALL="ru_RU.UTF-8"; export LC_ALL'
Комментариев нет:
Отправить комментарий