15 октября 2014

Кодировка UTF-8



На вопрос какую кодировку лучше использовать? Ответ простой - выбирайте 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'
 Переподключайтесь и любуйтесь русскими символами!

Комментариев нет:

Отправить комментарий