Сколько бит нужно для кодирования 1 текстового символа по Unicode?
кодировка UNICODE,в ней один символ занимает 2 байта (16 бит), это 65536 вариантов букв, в эту кодировку можно уместить все языки мира.
Ответ: 16 бит.
Маргарита Борисова
Юникод имеет несколько форм представления (англ. Unicode transformation format, UTF): UTF-8, UTF-16 (UTF-16BE, UTF-16LE) и UTF-32 (UTF-32BE, UTF-32LE). Была разработана также форма представления UTF-7 для передачи по семибитным каналам, но из-за несовместимости с ASCII она не получила распространения и не включена в стандарт.
В языках программирования на основе .NET Framework юникод занимает 2 байта на букву.
Однако, сила юникода в другом — число байтов определяется на основе данных. Поэтому unicode компактный формат. Если речь про UTF-8 то получаем следующее:
0x00000000 — 0x0000007F: 0xxxxxxx
0x00000080 — 0x000007FF: 110xxxxx 10xxxxxx
0x00000800 — 0x0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx
0x00010000 — 0x001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
Поэтому правильный ответ можно дать ответив на эти 2 вопроса
1) какой именно вариант Unicode имеется в виду?
2) какой код того текстового символа?
В языках на базе .NET Framework реализация UTF-8 вставляет второй байт нулевой если речь про английские буквы, и пишет 2 байта если это русский алфавит.
Сколько весит один символ в UTF-8
UTF-8, по сравнению с UTF-16, наибольший выигрыш в компактности даёт для текстов на латинице, поскольку латинские буквы без диакритических знаков, цифры и наиболее распространённые знаки препинания кодируются в UTF-8 лишь одним байтом, и коды этих символов соответствуют их кодам в ASCII.
- UTF-8 кодирует символы переменной длины, от 1 до 4 байт на символ.
- Один символ в информационном весе достаточного алфавита равен 1 байту.
- Латинские буквы без диакритических знаков, цифры и распространённые знаки препинания кодируются UTF-8 лишь одним байтом, соответствующим кодам в ASCII.
- Unicode использует два варианта кодирования: 8-битный и 16-битный. По умолчанию используется 16-битное кодирование, где каждый символ занимает 16 бит (два байта).
- Символ ASCII расширяется до 8 бит, дополнительно добавляя один нулевой бит в качестве старшего бита.
- Расширенная ASCII использует 2 байта в таблице Unicode. Так что 1 символ в компьютере занимает 1 или 2 байта.
- Один символ кодировки UTF-16 представлен последовательностью двух байт или двух пар байт.
- UTF-32 использует ровно 32 бита для кодирования любого символа, в отличие от UTF-8 и UTF-16, которые используют переменное число байтов для представления символов.
- Сколько весит один символ
- Сколько байт один символ UTF-8
- Чему равен 1 символ в Unicode
- Сколько весит 1 символ ASCII
- Какой объем занимает 1 символ
- Сколько байт требуется для 1 символ
- Сколько весит один символ в UTF 32
- Сколько весит символ в UTF-16
- Сколько бит будет весить один символ
- Чем UTF-8 отличается от Unicode
- Сколько весит один пробел
- Сколько весит символ Unicode
- Сколько весит один символ в КОИ-8
- Сколько бит на символ
- Сколько весит один символ двоичного кода
- Сколько бит в UTF-8
- Сколько весит символ текста
- Сколько бит отводится в Unicode
- Сколько байт занимает ASCII
- Сколько весит символ в Unicode 16
- Сколько весит символ в строке
- Чему равен символ
Сколько весит один символ
Таким образом, информационный вес одного символа достаточного алфавита равен 1 байту.
Сколько байт один символ UTF-8
UTF-8 — это кодировка символов переменной длины, что, в данном случае, означает длину от 1 до 4 байт на символ.
Чему равен 1 символ в Unicode
Unicode использует два варианта кодирования: 8-битный и 16-битный. По умолчанию используется 16-битное кодирование, то есть каждый символ занимает 16 бит (два байта); обычно его записывают как U+hhhh, где hhhh — шестнадцатеричный код символа.
Сколько весит 1 символ ASCII
Представление ASCII в ЭВМ
Обычно символ ASCII расширяют до 8 бит, просто добавляя один нулевой бит в качестве старшего.
Какой объем занимает 1 символ
Расширенная ASCII позволяет использовать все 8 бит для кодирования. В таблице Unicode используется 2 байта, поэтому можно сказать, что 1 символ в компьютере занимает 1 или 2 байта.
Сколько байт требуется для 1 символ
Один символ кодировки UTF-16 представлен последовательностью двух байт или двух пар байт.
Сколько весит один символ в UTF 32
Universal Character Set) в информатике — один из способов кодирования символов Юникода, использующий для кодирования любого символа ровно 32 бита. Остальные кодировки, UTF-8 и UTF-16, используют для представления символов переменное число байтов.
Сколько весит символ в UTF-16
Один символ кодировки UTF-16 представлен последовательностью двух байтов или двух пар байтов.
Сколько бит будет весить один символ
Один символ алфавита «весит» 10 бит.
Чем UTF-8 отличается от Unicode
Таблица Юникод каждому символу UCS сопоставляет кодовую точку, которая является номером ячейки таблицы, содержащей символ. UTF-8 — стандарт кодирования, преобразующий номера ячеек таблицы Юникод в бинарные коды с использованием переменного количества бит: 8, 16, 24 или 32.
Сколько весит один пробел
Заметим, что пробел занимает 1 байт.
Сколько весит символ Unicode
В кодировке unicode на каждый символ отводится 2 байта.
Сколько весит один символ в КОИ-8
Определите количество символов в сообщении, если информационный
Сколько бит на символ
Каждый из этих символов представлен 7 битами данных. Для пересылки символов из расширенной таблицы ASCII (128-255) нужно использовать 8 битов.
Сколько весит один символ двоичного кода
К. 256 = 2^8, то вес 1 символа — 8 бит. Этот вес можно воспринимать как разрядность двоичного слова. То есть двоичный код каждого символа в компьютерном тексте занимает 1 байт памяти (или 8 бит).
Сколько бит в UTF-8
UTF-8 является лишь представлением Юникода в 8-битном виде. Символы с кодами меньше 128 представляются одним байтом, а так как в Юникоде они повторяют ASCII, то текст написанный только этими символами будет являться текстом в ASCII.
Сколько весит символ текста
Один символ компьютерного алфавита весит \(8\) бит или \(1\) байт.
Сколько бит отводится в Unicode
В заданной кодировке Unicode каждый символ алфавита занимает 2 байта = 16 бит памяти. Согласно условию заданное слово состоит из 24 символов, то оно будет занимать в памяти 24 * 2 байта = 48 байт. 48 байт = 384 бит (так как 1 байт = 8 бит). Ответ: 1) 384 бита.
Сколько байт занимает ASCII
В этой форме юникодные символы кодируются одиночными байтами. Но поскольку одного байта для кодирования миллиона символов слегка мало, разные символы кодируются разным количеством байтов. Те, которые входят в старый ASCII, кодируются одним байтом и их значения полностью с ASCII совпадают.
Сколько весит символ в Unicode 16
Один символ кодировки UTF-16 представлен последовательностью двух байтов или двух пар байтов.
Сколько весит символ в строке
В современных системах 1 символ строки занимает 1 байт информации.
Чему равен символ
«≈» — «приблизительно равно». Используется при обозначении двух величин, разницей между которыми в данной задаче можно пренебречь. «≃» — используется для обозначения гомеоморфных пространств в топологии.
16.05.2023 Сколько весит один символ в UTF-8
UTF-8 — самая популярная кодировка символов в Интернете. Она используется для кодирования текста на любых языках, включая китайский, японский и корейский, а также для хранения и передачи данных. Кодировка представляет собой переменную длину символов, что означает, что каждый символ может занимать от 1 до 4 байт.
Для сравнения, ASCII использует один байт для каждого символа, но только для символов на латинице и некоторых знаков препинания. Символы на других языках, например, кириллические, требуют расширенного набора символов, который использует более чем один байт.
UTF-16 использует два байта для каждого символа, однако не включает всех символов Юникода, в отличие от UTF-8. UTF-32 использует 32 бита (четыре байта) для каждого символа, что делает его самым «затратным» с точки зрения хранения данных. Однако UTF-32 предоставляет полную поддержку всех символов Юникода.
В первую очередь UTF-8 предназначен для использования в Интернете, поскольку компактность кодировки позволяет сократить количество передаваемой информации, сэкономить место на серверах и повысить скорость загрузки страниц. Также UTF-8 позволяет работать с множеством различных языков и использовать одинаковый формат для хранения и передачи данных на всех уровнях Интернета.
Таким образом, количество байт, занимаемых одним символом в UTF-8, зависит от самого символа, а не от кодировки в целом, и может варьироваться от 1 до 4 байтов. В случае, если символ находится в диапазоне ASCII, то используется только 1 байт. В случае, когда символы не входят в диапазон ASCII, подразумевается использование двух или более байтов для их кодирования.
UTF-8
UTF-8 — это кодировка символов переменной длины, что, в данном случае, означает длину от 1 до 4 байт на символ. Первый байт UTF-8 используется для кодирования ASCII, что означает, что данный набор символов полностью обратно совместим с ASCII. UTF-8 означает, что символы ASCII и Latin полностью взаимозаменяемы с небольшим увеличением размера данных, так как используется только первый байт. Пользователи восточных алфавитов, например, японского, которым назначили диапазон с большим числом байт несчастливы, так как это приводит к 50-процентной избыточности в их данных.
- 1 Кодировки символов
- 1.1 Что такое кодировка символов?
- 1.2 История кодировок символов
- 1.3 Что такое Юникод?
- 1.4 Что UTF-8 может сделать
- 2.1 Поиск или создание локалей UTF-8
- 2.2 Настройка локали
- 2.3 Альтернатива: Использование eselect для настройки локали
- 3.1 (V)FAT
- 3.2 Имена файлов
- 3.3 Системная консоль
- 3.4 Ncurses и Slang
- 3.5 KDE, GNOME и Xfce
- 3.6 X11 и шрифты
- 3.7 Диспетчеры окон и эмуляторы терминалов
- 3.8 Vim, emacs, xemacs и nano
- 3.9 Командные оболочки
- 3.10 Irssi
- 3.11 Mutt
- 3.12 links и elinks
- 3.13 Samba
- 3.14 Проверка работоспособности
- 4.1 Системные конфигурационные файлы (в /etc)
Кодировки символов
Что такое кодировка символов?
Компьютеры неспособны воспринимать текст как человек. Вместо этого они каждый символ представляют как число. Традиционно каждый набор чисел, используемый для представления алфавитов и символов (известный как кодировка или набор символов), ограничен по размеру в силу ограничений оборудования.
История кодировок символов
Самой распространенной (или, по крайней мере, наиболее принятой повсеместно) кодировкой является ASCII (Американский стандартный код для обмена информацией, American Standard Code for Information Interchange). Часто считается, что ASCII — наиболее успешный программный стандарт из когда-либо созданных. Современный ASCII стандартизован в 1986 году (ANSI X3.4, RFC 20, ISO/IEC 646:1991, ECMA-6) Американским национальным институтом по стандартизации (American National Standards Institute, ANSI).
ASCII является строго семибитной кодировкой, из чего следует, что она использует семь двоичных цифр, то есть интервал от 0 до 127. Сюда входят 33 невидимых управляющих символа с кодами от 0 до 31 и управляющим символом DEL (или delete) с кодом 127. Символы в диапазоне от 32 до 126 видимы — это пробел, знаки препинания, латинские буквы и цифры.
Восьмой бит в ASCII изначально использовался как бит контроля четности для проверки ошибок при передаче информации. Если проверка на ошибки не важна, то он остается равным 0. Это означает, что в ASCII каждый символ занимал один байт.
Хотя ASCII было достаточно для передачи информации на английском, для других европейских языков, содержащих символы с диакритическими знаками, это было не так просто. Для них был разработаны стандарты семейства ISO 8859. Они были обратно совместимы с ASCII, но использовали восьмой бит для дополнения таблицы дополнительными 128 символами (32 управляющих и 96 видимых) для каждой кодировки. Скоро стали видны и ограничения ISO 8859. На данный момент существует 15 вариантов стандарта ISO 8859 (с 8859-1 по 8859-15). Зачастую для каждого символа вне ASCII-совместимого диапазона между этими стандартами возникал конфликт. И словно этого было мало, для ещё большей путаницы корпорация Microsoft ввела собственную кодировку Windows-1252, использовавшуюся для западноевропейских языков в некоторых версиях Microsoft Windows. Набор видимых символов этой кодировки является надстройкой надстройкой ISO 8859-1, обладающий, однако, собственными изменениями; тем не менее, все эти наборы сохранили совместимость с ASCII.
Необходимость разработки совершенно отличных от ASCII однобайтовых кодировок для нелатинских алфавитов, как например EUC (Extended Unix Coding), используемый в японском и корейском (и в меньшей степени китайском) алфавитах, породила еще большую неразбериху с кодировками. Ряд операционных систем все еще использует различные наборы символов для одного и того же языка, например японские Shift-JIS и ISO-2022-JP. А пользователи, желающие видеть кириллицу, вынуждены были выбирать между KOI8-R (для русского и болгарского языков) и KOI8-U (для украинского языка), неудачной ISO 8859-5 и популярной Windows-1251. Все три семейства кодировок не полностью совместимы с ASCII. Хотя надо отметить, в KOI8 фонетически созвучные кириллические символы расположены так же, как и латинские, благодаря чему даже при отбрасывании восьмого бита текст оставался читабельным в ASCII-терминалах в виде транслита.
Все это привело к путанице и почти полной невозможности многоязычного общения; в особенности с использованием различных алфавитов. Переходим к Юникоду.
Что такое Юникод?
Юникод отбрасывает лимит традиционных однобайтовых кодировок. Он использует 17 «плоскостей», содержащих по 65 536 кодов символов. Таким образом, максимальное возможное число символов равно 1 114 112. Поскольку в первой плоскости («Basic Multilingual Plane» или BMP) содержится почти всё, что может понадобиться, многие ошибочно посчитали, что Юникод это 16-битный набор символов.
Юникод реализован несколькими способами, но распространены только два UTF (Unicode Transformation Format) и UCS (Universal Character Set). Число после UTF обозначает число бит на каждый символ, когда как число после UCS обозначает число байт. UTF-8 стала наиболее распространенной при обмене текста Юникод из-за своей явной ориентированности на размер в 8 бит; поэтому является основной темой данного документа.
Что UTF-8 может сделать
UTF-8 позволяет пользователям работать в совместимой со всеобщими стандартами и принятой по всему миру многоязычной среде, правда с небольшим увеличением размера данных. Это наилучший способ для передачи не-ASCII символов через интернет, будь то электронная почта, IRC-сети или что-нибудь еще. Несмотря на это, множество людей расценивают использование UTF-8 при передаче данных неприличным и неуважительным. Всегда следует выяснять, поддерживает ли определенный канал, группа Usenet или список рассылки UTF-8 перед тем, как использовать символы из не-ASCII диапазона UTF-8.
Настройка UTF-8 в Gentoo Linux
Поиск или создание локалей UTF-8
Теперь, когда принципы лежащие в основе Unicode были изложены, начнем использовать UTF-8 на локальной системе!
Пользователям, которым нужна более детальная информация, могут найти ее в статье Руководство Gentoo по локализации.
Далее, нужно определить, доступна ли локаль UTF-8 для нашего языка или придется создать её.
user $ locale -a | grep ‘en_GB’
en_GB en_GB.utf8
На выходе этой команды мы должны получить хотя бы одну строку, содержащую суффикс .UTF-8 . Если таковых нет, то нам придётся создать локаль, совместимую с UTF-8.
Команда выше перечисляет суффикс в нижнем регистре без дефисов, glibc понимает обе формы суффикса, многие другие программы — нет. Наиболее распространённым примером является Xorg. Поэтому лучше всегда использовать UTF-8 вместо utf8.
Заметка
Запускайте следующую команду, если в система не имеет UTF-8 локали для выбранного языка.Замените «en_GB», если нужна какая-то другая локаль:
root # localedef -i en_GB -f UTF-8 en_GB.UTF-8
Другим способом включить локаль UTF-8 является добавление её в файл /etc/locale.gen и генерация нужных локалей с помощью команды locale-gen . Локали будут записаны в архив локалей /usr/lib/locale/locale-archive .
КОД Строка в /etc/locale.gen
en_GB.UTF-8 UTF-8
root # locale-gen
* Generating 1 locales (this might take a while) with 1 jobs * (1/1) Generating en_GB.UTF-8 . [ ok ] * Generation complete
Настройка локали
Есть одна переменная среда, которую необходимо настроить, чтобы использовать UTF-8 локали: LC_CTYPE (также, можно изменить переменную LANG , чтобы изменить системный язык). Есть множество способов сделать это. Некоторые системные администраторы предпочитают использовать UTF-8 только для определенного пользователя, поэтому они устанавливают эту переменную в своём ~/.profile ( /bin/sh > для пользователей Bourne shell), ~/.bash_profile или ~/.bashrc ( /bin/bash для пользователей Bourne again shell). Больше информации, а также наилучшие способы локализации можно найти в Руководстве по локализации.
Другие же предпочитают установить локаль глобально. Есть по крайней один весомый аргумент в пользу этого подхода — при использовании /etc/init.d/xdm , так как init-скрипт запускают диспетчер окон до того, как будут загружены конфигурационные файлы командной оболочки. Другими словами, это выполняется до того момента, как какие-либо переменные попадут в окружение пользователя.
Настройка локали глобально делается с помощью файла /etc/env.d/02locale . Он должен выглядеть следующим образом:
ФАЙЛ /etc/env.d/02locale Демонстрация для en_GB.UTF-8
## (Как обычно, замените "en_GB.UTF-8" соответствующее значение локали; каждый язык имеет своё значение!) LANG="en_GB.UTF-8"
Заметка
Можно использовать LC_CTYPE вместо переменной LANG . За дополнительными сведениями о категориях, на которые влияет использование LC_CTYPE , обращайтесь к странице локалей GNU.Далее, следует обновить среду переменных, запустив следующую команду:
root # env-update
>>> Regenerating /etc/ld.so.cache.
root # source /etc/profile
Теперь запустите locale без аргументов, чтобы увидеть, что верные переменные были загружены в окружающую среду переменных:
root # locale
LANG=en_GB.utf8 LC_CTYPE="en_GB.utf8" LC_NUMERIC="en_GB.utf8" LC_TIME="en_GB.utf8" LC_COLLATE="en_GB.utf8" LC_MONETARY="en_GB.utf8" LC_MESSAGES="en_GB.utf8" LC_PAPER="en_GB.utf8" LC_NAME="en_GB.utf8" LC_ADDRESS="en_GB.utf8" LC_TELEPHONE="en_GB.utf8" LC_MEASUREMENT="en_GB.utf8" LC_IDENTIFICATION="en_GB.utf8" LC_ALL=
Значения переменных окружения локали, которые были явно установлены, например, при помощи «export» (в bash), перечислены без двойных кавычек. Те переменные, чьи значения были унаследованы от других переменных окружения локали, содержат свои значения в двойных кавычках.
Альтернатива: Использование eselect для настройки локали
То, что было написано выше, достаточно, чтобы хорошо настроить систему, можно также проверить правильность настройки локали с помощью утилиты eselect .
Используйте команду eselect , чтобы получить список доступных локалей в системе:
root # eselect locale list
[1] C [2] POSIX * [3] en_GB.utf8 [ ] (free form)
Утилита eselect выводит список локалей. После того, как нужная локаль была определена, активируйте ее:
root # eselect locale set 3
Setting LANG to en_GB.utf8 .
root # eselect locale list
[1] C [2] POSIX [3] en_GB.utf8 * [ ] (free form)
В случае предпочтения использовать .UTF-8 заместо .utf8 в /etc/env.d/02locale , запустите соответствующую команду eselect:
root # eselect locale set en_GB.UTF-8
Setting LANG to en_GB.UTF-8 .
root # eselect locale list
[1] C [2] POSIX [3] en_GB.utf8 [4] en_GB.UTF-8 * [ ] (free form)
Запуск следующей команды обновит переменное окружение для shell:
root # env-update && source /etc/profile
>>> Regenerating /etc/ld.so.cache.
Вот и всё. Теперь система использует локаль UTF-8. Следующим этапом будет настройка повседневно используемых приложений.
Поддержка приложениями
Когда Юникод делал первые шаги в мире программного обеспечения, многобайтовые кодировки были плохо совместимы с таким языком программирования как C, на котором написаны многие из часто используемых программ. Даже сейчас некоторые программы не способны работать с UTF-8 как надо. К счастью, большинство распространенных программ поддерживают Юникод.
(V)FAT
Для настройки поддержки UTF-8 в файловых системах FAT смотрите статью FAT.
Имена файлов
Чтобы сменить кодировку имен файлов, используйте app-text/convmv .
root # emerge —ask app-text/convmv
Команда convmv имеет следующий формат:
root # convmv -f -t utf-8
Замените iso-8859-1 кодировкой, с которой хотите конвертировать:
root # convmv -f iso-8859-1 -t utf-8 имя_файла
Для изменения содержимого файлов, используйте утилиту iconv , поставляемую вместе с sys-libs/glibc и уже должна быть установлена в системе Gentoo. Замените iso-8859-1 кодировкой, с которой хотите конвертировать. После запуска команды убедитесь в нормальном выходе:
root # iconv -f iso-8859-1 -t utf-8 имя_файла
Чтобы конвертировать файл, нужно создать другой файл:
root # iconv -f iso-8859-1 -t utf-8 имя_файла > новый_файл
Также для перекодировки может быть использован пакет ( app-text/recode ).
Системная консоль
Для поддержки консолью локали UTF-8 нужно отредактировать /etc/rc.conf . Установите переменную UNICODE=»yes» и прочтите комментарии в этом файле — важно, чтобы в системе были шрифты с нужным диапазоном символов, если хотите выжать из Юникода всё. Чтобы это сработало, удостоверьтесь, что локаль Unicode была правильно создана.
В файле /etc/conf.d/keymaps переменная KEYMAP должна соответствовать раскладке Unicode.
КОД Выдержка из /etc/conf.d/keymaps
## (Замените uk на любимую раскладку) keymap="uk"
Ncurses и Slang
Заметка
Игнорируйте любые упоминания о Slang в этом разделе, если он не установлен или не нужен.Будет хорошим решением добавить unicode к глобальным USE-флагам в файле /etc/portage/make.conf , а затем при необходимости пересобрать sys-libs/ncurses и sys-libs/slang . Portage это сделает автоматически при обновлении системы, если он был запущен с опциями —changed-use или —newuse . Запустите следующую команду чтобы обновить пакеты:
root # emerge —update —deep —newuse @world
Также понадобится пересобрать пакеты, зависящие от них, чтобы изменения USE вступили в силу. Используемая утилита ( revdep-rebuild ) входит в пакет app-portage/gentoolkit .
root # revdep-rebuild —library libncurses.so.5
root # revdep-rebuild —library libslang.so.1KDE, GNOME и Xfce
Все основные графические оболочки полностью совместимы с Юникодом и не требуют дополнительной настройки, кроме той, что описана в этом документе. Все это благодаря тому, графические библиотеки (Qt и GTK+ 2) совместимы с UTF-8. Следовательно, все приложения, работающие на основе этих библиотек, также должны поддерживать UTF-8 без дополнительных настроек.
У приложений написанных на GTK, для ввода шестнадцатеричного Юникода нужно ввести Ctrl + Shift + u + . Например, символ Юникода ✔ , у которого Юникод номер U+2714, может быть введен как Ctrl + Shift + u + 2714 + ENTER , что после преобразования станет ✔ .
X11 и шрифты
Шрифты TrueType обычно совместимы с Юникодом, и большинство шрифтов, поставляемых с Xorg, имеют поддержку большинства кодировок, хотя не все глифы Юникода могут быть отображены для конкретного шрифта.
Также множество пакетов шрифтов в Portage совместимы с Юникодом. Смотрите страницу Fontconfig для более подробной информации о рекомендуемых шрифтах и настройках.
Диспетчеры окон и эмуляторы терминалов
Диспетчеры окон, не использующие GTK или Qt, обычно очень хорошо поддерживают Юникод, так как чаще всего для отображения шрифтов используют библиотеку Xft. Если диспетчер окон не использует Xft, то еще возможно использовать FontSpec, указанный в предыдущем разделе в качестве шрифта Юникода.
Эмуляторы терминала, использующие Xft и поддерживающие Юникод найти сложнее. Кроме Konsole и GNOME Terminal, лучшим выбором в Portage будет x11-terms/rxvt-unicode , x11-terms/xfce4-terminal , gnustep-apps/terminal , x11-terms/mlterm или просто x11-terms/xterm , собранный с USE-флагом unicode и запускаемый как uxterm . app-misc/screen тоже поддерживает UTF-8, если запускается с параметром screen -U , или в файле ~/.screenrc есть следующая строчка:
КОД ~/.screenrc для UTF-8
defutf8 on
Vim, emacs, xemacs и nano
Vim полностью поддерживает UTF-8 и к тому же автоматически определяет файлы с UTF-8. Для более детальной информации используйте в Vim :help mbyte.txt .
GNU Emacs с версии 23 и XEmacs версии 21.5 имеют полную поддержку UTF-8. GNU Emacs 24 также поддерживает редактирование текста в обоих направлениях.
Nano полностью поддерживает UTF-8 начиная с версии 1.3.6.
Командные оболочки
На данный момент Bash полностью поддерживает Юникод через библиотеку GNU readline. Z Shell поддерживает Unicode при использовании USE-флага unicode .
Оболочки C, tcsh и ksh не поддерживают UTF-8.
Irssi
Irssi полностью поддерживает UTF-8, хотя для этого требуется дополнительная настройка пользователем.
[irssi] set term_charset UTF-8
Для каналов, где не-ASCII символы чаще всего передаются в не-UTF-8 кодировках, может пригодиться команда /recode для перекодировки символов. Наберите /help recode для большего количества информации.
Mutt
Почтовый агент Mutt очень хорошо справляется с Юникодом. Чтобы использовать UTF-8 в Mutt, не надо что-либо добавлять в конфигурационные файлы. Mutt будет работать с Юникодом без модификаций, при условии, что все конфигурационные файлы (включая подпись) сохранены в UTF-8.
Заметка
Если всё ещё видите ‘?’ в письмах при чтении с помощью Mutt? Это случается из-за того, что некоторые люди используют почтовые клиенты, которые не указывают используемую кодировку письма. Мало что можно сделать в этом случае, кроме как попросить их правильно настроить свои клиенты.Для более детальной информации см. Mutt Wiki.
links и elinks
Это самые популярные текстовые браузеры, и вы узнаете, как установить поддержку UTF-8 для них. В elinks и links есть два способа сделать это — через меню Setup (Установки) браузера или отредактировав конфигурационный файл. Чтобы настроить параметры в самом браузере, откройте какой-нибудь сайт с помощью elinks или links и нажмите Alt + S для входа в меню настроек (Setup Menu), после чего выберите параметры терминала (Terminal options), или нажмите T . Пролистайте вниз и выберите последний параметр UTF-8 I/O , нажав на Enter . Затем сохраните и выйдите из меню. В links можно сделать тоже самое, нажав Alt + S , а затем S для сохранения. Пример конфигурационного файла показан ниже.
КОД Включение UTF-8 в elinks/links
## (Для elinks добавьте в /etc/elinks/elinks.conf или ~/.elinks/elinks.conf следующую строку) set terminal.linux.utf_8_io = 1 ## (Для links, добавьте в ~/.links/links.cfg следующую строку) terminal "xterm" 0 1 0 us-ascii utf-8
Samba
Samba — это набор программ, реализующих протокол SMB (Server Message Block) для UNIX-систем (Mac, Linux и FreeBSD). Этот протокол также иногда упоминается как Common Internet File System (CIFS). Samba содержит также систему NetBIOS, используемую для предоставления доступа к файлам в Windows-сетях.
Добавьте следующие строки в раздел [global] :
root # nano -w /etc/samba/smb.conf
dos charset = 1255 unix charset = UTF-8 display charset = UTF-8
Проверка работоспособности
Есть множество сайтов, использующих UTF-8 и большинство популярных веб-браузеров в Gentoo полностью поддерживают UTF-8.
При использовании текстовых браузеров, удостоверьтесь, что используется совместимый с Юникодом терминал.
Если некоторые символы отображаемые как квадратики с буквами или цифрами внутри, то это значит, что в текущем шрифте нет соответствующего символа или глифа для этого символа. Вместо этого, он отображает квадрат с шестнадцатеричным кодом символа UTF-8.
- unicode-table.com
- тестовая страница UTF-8 W3C
- тестовая страничка UTF-8 от Университета Франкфурта
Известные проблемы
Системные конфигурационные файлы (в /etc)
Большинство системных конфигурационных файлов (например, /etc/fstab ) не поддерживают UTF-8. Рекомендуется придерживаться набора символов ASCII при работе с этими файлами.
Внешние ресурсы
- статья в Википедии про Юникод (ru)
- статья в Википедии про UTF-8 (ru)
- Unicode.org
- UTF-8.com
- RFC 3629
- RFC 2277
- символы и байты
- библиотека GNU C: локали и интернационализация
- unifoundry.com — руководство по unicode
- Описание USE-флага unicodeThis page is based on a document formerly found on our main website gentoo.org.
The following people contributed to the original document: Thomas Martin, Alexander Simonov, Shyam Mani,
They are listed here because wiki history does not allow for any external attribution. If you edit the wiki article, please do not add yourself here; your contributions are recorded on each article’s associated history page.
Символы Unicode: о чём должен знать каждый разработчик

Если вы пишете международное приложение, использующее несколько языков, то вам нужно кое-что знать о кодировке. Она отвечает за то, как текст отображается на экране. Я вкратце расскажу об истории кодировки и о её стандартизации, а затем мы поговорим о её использовании. Затронем немного и теорию информатики.
Введение в кодировку
Компьютеры понимают лишь двоичные числа — нули и единицы, это их язык. Больше ничего. Одно число называется байтом, каждый байт состоит из восьми битов. То есть восемь нулей и единиц составляют один байт. Внутри компьютеров всё сводится к двоичности — языки программирования, движений мыши, нажатия клавиш и все слова на экране. Но если статья, которую вы читаете, раньше была набором нулей и единиц, то как двоичные числа превратились в текст? Давайте разберёмся.
Краткая история кодировки
На заре своего развития интернет был исключительно англоязычным. Его авторам и пользователям не нужно было заботиться о символах других языков, и все нужды полностью покрывала кодировка American Standard Code for Information Interchange (ASCII).
ASCII — это таблица сопоставления бинарных обозначений знакам алфавита. Когда компьютер получает такую запись:
01001000 01100101 01101100 01101100 01101111 00100000 01110111 01101111 01110010 01101100 01100100то с помощью ASCII он преобразует её во фразу «Hello world».
Один байт (восемь бит) был достаточно велик, чтобы вместить в себя любую англоязычную букву, как и управляющие символы, часть из которых использовалась телепринтерами, так что в те годы они были полезны (сегодня уже не особо). К управляющим символам относился, например 7 (0111 в двоичном представлении), который заставлял компьютер издавать сигнал; 8 (1000 в двоичном представлении) — выводил последний напечатанный символ; или 12 (1100 в двоичном представлении) — стирал весь написанный на видеотерминале текст.
В те времена компьютеры считали 8 бит за один байт (так было не всегда), так что проблем не возникало. Мы могли хранить все управляющие символы, все числа и англоязычные буквы, и даже ещё оставалось место, поскольку один байт может кодировать 255 символов, а для ASCII нужно только 127. То есть неиспользованными оставалось ещё 128 позиций в кодировке.
Вот как выглядит таблица ASCII. Двоичными числами кодируются все строчные и прописные буквы от A до Z и числа от 0 до 9. Первые 32 позиции отведены для непечатаемых управляющих символов.

Проблемы с ASCII
Позиции со 128 по 255 были пустыми. Общественность задумалась, чем их заполнить. Но у всех были разные идеи. Американский национальный институт стандартов (American National Standards Institute, ANSI) формулирует стандарты для разных отраслей. Там утвердили позиции ASCII с 0 по 127. Их никто не оспаривал. Проблема была с остальными позициями.
Вот чем были заполнены позиции 128-255 в первых компьютерах IBM:

Какие-то загогулины, фоновые иконки, математические операторы и символы с диакретическим знаком вроде é. Но разработчики других компьютерных архитектур не поддержали инициативу. Всем хотелось внедрить свою собственную кодировку во второй половине ASCII.
Все эти различные концовки назвали кодовыми страницами.
Что такое кодовые страницы ASCII?
Здесь собрана коллекция из более чем 465 разных кодовых страниц! Существовали разные страницы даже в рамках какого-то одного языка, например, для греческого и китайского. Как можно было стандартизировать этот бардак? Или хотя бы заставить его работать между разными языками? Или между разными кодовыми страницами для одного языка? В языках, отличающихся от английского? У китайцев больше 100 000 иероглифов. ASCII даже не может всех их вместить, даже если бы решили отдать все пустые позиции под китайские символы.
Эта проблема даже получила название Mojibake (бнопня, кракозябры). Так говорят про искажённый текст, который получается при использовании некорректной кодировки. В переводе с японского mojibake означает «преобразование символов».

Пример бнопни (кракозябров).
Безумие какое-то.
Именно! Не было ни единого шанса надёжно преобразовывать данные. Интернет — это лишь монструозное соединение компьютеров по всему миру. Представьте, что все страны решили использовать собственные стандарты. Например, греческие компьютеры принимают только греческий язык, а английские отправляют только английский. Это как кричать в пустой пещере, тебя никто не услышит.
ASCII уже не удовлетворял жизненным требованиям. Для всемирного интернета нужно было создать что-то другое, либо пришлось бы иметь дело с сотнями кодовых страниц.
��� Если только ������ вы не хотели ��� бы ��� читать подобные параграфы. �֎֏0590��׀ׁׂ׃ׅׄ׆ׇ
Так появился Unicode
Unicode расшифровывают как Universal Coded Character Set (UCS), и у него есть официальное обозначение ISO/IEC 10646. Но обычно все используют название Unicode.
Этот стандарт помог решить проблемы, возникавшие из-за кодировки и кодовых страниц. Он содержит множество кодовых пунктов (кодовых точек), присвоенных символам из языков и культур со всего мира. То есть Unicode — это набор символов. С его помощью можно сопоставить некую абстракцию с буквой, на которую мы хотим ссылаться. И так сделано для каждого символа, даже египетских иероглифов.
Кто-то проделал огромную работу, сопоставляя каждый символ во всех языках с уникальными кодами. Вот как это выглядит:
«Hello World» U+0048 : латинская прописная H U+0065 : латинская строчная E U+006C : латинская строчная L U+006C : латинская строчная L U+006F : латинская строчная O U+0020 : пробел U+0057 : латинская прописная W U+006F : латинская строчная O U+0072 : латинская строчная R U+006C : латинская строчная L U+0064 : латинская строчная DПрефикс U+ говорит о том, что это стандарт Unicode, а число — это результат преобразования двоичных чисел. Стандарт использует шестнадцатеричную нотацию, которая является упрощённым представлением двоичных чисел. Здесь вы можете ввести в поле что угодно и посмотреть, как это будет преобразовано в Unicode. А здесь можно полюбоваться на все 143 859 кодовых пунктов.
Уточню на всякий случай: речь идёт о большом словаре кодовых пунктов, присвоенных всевозможным символам. Это очень большой набор символов, не более того.
Осталось добавить последний ингредиент.
Unicode Transform Protocol (UTF)
UTF — протокол кодирования кодовых пунктов в Unicode. Он прописан в стандарте и позволяет кодировать любой кодовый пункт. Однако существуют разные типы UTF. Они различаются количеством байтов, используемых для кодировки одного пункта. В UTF-8 используется один байт на пункт, в UTF-16 — два байта, в UTF-32 — четыре байта.
Но если у нас есть три разные кодировки, то как узнать, какая из них применяется в конкретном файле? Для этого используют маркер последовательности байтов (Byte Order Mark, BOM), который ещё называют сигнатурой кодировки (Encoding Signature). BOM — это двухбайтный маркер в начале файл, который говорит о том, какая именно кодировка тут применена.
В интернете чаще всего используют UTF-8, она также прописана как предпочтительная в стандарте HTML5, так что уделю ей больше всего внимания.

Этот график построен в 2012-м, UTF-8 становилась доминирующей кодировкой. И всё ещё ею является.

График показывает распространённость UTF-8.
Что такое UTF-8 и как она работает?
UTF-8 кодирует с помощью одного байта каждый кодовый пункт Unicode с 0 по 127 (как в ASCII). То есть если вы писали программу с использованием ASCII, а ваши пользователи применяют UTF-8, они не заметят ничего необычного. Всё будет работать как задумано. Обратите внимание, как это важно. Нам нужно было сохранить обратную совместимость с ASCII в ходе массового внедрения UTF-8. И эта кодировка ничего не ломает.
Как следует из названия, кодовый пункт состоит из 8 битов (один байт). В Unicode есть символы, которые занимают несколько байтов (вплоть до 6). Это называют переменной длиной. В разных языках удельное количество байтов разное. В английском — 1, европейские языки (с латинским алфавитом), иврит и арабский представлены с помощью двух байтов на кодовый пункт. Для китайского, японского, корейского и других азиатских языков используют по три байта.
Если нужно, чтобы символ занимал больше одного байта, то применяется битовая комбинация, обозначающая переход — он говорит о том, что символ продолжается в нескольких следующих байтах.
И теперь мы, как по волшебству, пришли к соглашению, как закодировать шумерскую клинопись (Хабр её не отображает), а также значки emoji!
Подытожив сказанное: сначала читаем BOM, чтобы определить версию кодировки, затем преобразуем файл в кодовые пункты Unicode, а потом выводим на экран символы из набора Unicode.
Напоследок про UTF
Коды являются ключами. Если я отправлю ошибочную кодировку, вы не сможете ничего прочесть. Не забывайте об этом при отправке и получении данных. В наших повседневных инструментах это часто абстрагировано, но нам, программистам, важно понимать, что происходит под капотом.
Как нам задавать кодировку? Поскольку HTML пишется на английском, и почти все кодировки прекрасно работают с английским, мы можем указать кодировку в начале раздела .
Важно сделать это в самом начале , поскольку парсинг HTML может начаться заново, если в данный момент используется неправильная кодировка. Также узнать версию кодировки можно из заголовка Content-Type HTTP-запроса/ответа.
Если HTML-документ не содержит упоминания кодировки, спецификация HTML5 предлагает такое интересное решение, как BOM-сниффинг. С его помощью мы по маркеру порядка байтов (BOM) можем определить используемую кодировку.
Это всё?
Unicode ещё не завершён. Как и в случае с любым стандартом, мы что-то добавляем, убираем, предлагаем новое. Никакие спецификации нельзя назвать «завершёнными». Обычно в год бывает 1-2 релиза, найти их описание можно здесь.
Если вы дочитали до конца, то вы молодцы. Предлагаю сделать домашнюю работу. Посмотрите, как могут ломаться сайты при использовании неправильной кодировки. Я воспользовался этим расширением для Google Chrome, поменял кодировку и попытался открывать разные страницы. Информация была совершенно нечитаемой. Попробуйте сами, как выглядит бнопня. Это поможет понять, насколько важна кодировка.

Заключение
При написании этой статьи я узнал о Майкле Эверсоне. С 1993 года он предложил больше 200 изменений в Unicode, добавил в стандарт тысячи символов. По состоянию на 2003 год он считался самым продуктивным участником. Он один очень сильно повлиял на облик Unicode. Майкл — один из тех, кто сделал интернет таким, каким мы его сегодня знаем. Очень впечатляет.
Надеюсь, мне удалось показать вам, для чего нужны кодировки, какие проблемы они решают, и что происходит при их сбоях.
- Блог компании VK
- Веб-разработка
- Проектирование и рефакторинг
- Терминология IT
- Хранение данных