Ссылка на оригинал: http://www.gentoo.org/doc/ru/utf-8.xml
С версии: 1.0
Путь Юникода в русском Gentoo-сообществе сложен. Мы постоянно сталкивались с проблемами неполной поддержки или же неподдержки вовсе отдельными приложениями стандарта UTF-8.
Но всё меняется к лучшему. Большинство приложений так или иначе стало поддерживать региональные настройки UTF-8. А для не поддерживающих уже разработаны способы исправления этого недостатка. Но всё же, если у вас возникли трудности с настройкой Юникода в Gentoo, то вы всегда найдете помощь и поддержку (иногда сквозь стиснутые зубы :)) на следующих страницах:
Если вы заметили неточность или хотите дополнить данное руководство, пожалуйста свяжитесь переводчиком или одним из редакторов перевода.
Что такое кодировка?
Компьютеры неспособны воспринимать текст. Вместо этого они каждый символ представляют как число. Традиционно каждый набор чисел, соответствующий алфавиту и символам (известный как кодировка или набор символов), ограничен в размере в силу ограничений оборудования.
История кодировок символов
Самой распространенной (или наиболее принятой повсеместно) кодировкой является 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. ASCII начинается с 32 невидимых управляющих символов (с кодами от 0 до 31) и заканчивается управляющим символом DEL (или delete) с кодом 127. Символы в диапазоне от 32 до 126 видимы — это пробел, знаки препинания, латинские буквы и цифры.
Восьмой бит в ASCII изначально использовался как бит целостности для проверки ошибок при передаче информации. Если не указывалось особо, он всегда равнялся 0. Это означает, что в ASCII каждый символ равняется одному байту.
Хотя ASCII было достаточно для передачи информации на английском, для других европейских языков, содержащих символы с ударениями, это было не так просто. Для них был разработаны стандарты семейства ISO 8859. Они были обратно совместимы с ASCII, но также использовали восьмой бит для дополнения таблицы дополнительными 127 символами для каждой кодировки. Ограничения ISO 8859 были незначительными, поэтому стандарт получил распространение. На данный момент существует 15 вариантов стандарта ISO 8859 (от 8859-1 до 8859-15). Однако для каждого символа вне ASCII-совместимого диапазона между этими стандартами возникал конфликт. Чтобы еще больше усилить конфликт между различными кодировками, для восточноевропейских языков корпорацией Microsoft был введен набор Windows-1252, использованный в ранних версиях 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 стала наиболее распространенной при обмене текста Юникод из-за малых (сравнительно) потерь при хранении текста, Поэтому она и является основной темой данного документа.
UTF-8
UTF-8 — это кодировка переменной длины. Это означает, что для каждого символа она может использовать от одного до четырех байт. Первый байт UTF-8 используется для кодирования ASCII, благодаря чему UTF-8 полностью обратно совместима с ASCII. UTF-8 подразумевает, что ASCII и латинские символы равнозначны с небольшим увеличением размера данных, так как используется только первый байт. Пользователи восточных кодировок (например, японского), которым назначены старшие диапазоны, не так рады, так как в результате их данные разбухают на 50 %.
Что UTF-8 может сделать для вас
UTF-8 позволяет вам работать в совместимой со всеобщими стандартами и принятой по всему миру многоязычной среде, правда с небольшими потерями при обработке данных. UTF-8 — это наилучший способ для передачи не-ASCII символов через интернет, будь то электронная почта, IRC-сети или что-нибудь еще. Несмотря на это, множество людей расценивают использование UTF-8 при передаче данных неприличным и неуважительным. Всегда следует выяснять, поддерживает ли определенный канал, группа Usenet или список рассылки UTF-8 перед тем, как использовать символы из не-ASCII диапазона UTF-8.
Поиск или создание локалей UTF-8
Теперь, когда вы поняли основы Юникода, вы готовы начать использование UTF-8 в вашей системе.
Главным требованием для UTF-8 является наличие установленной библиотеки glibc с поддержкой национального языка. При этом рекомендуется использовать файл /etc/locale.gen. Описание использования этого файла, однако, выходит за рамки данного документа. Его использование описано в Руководстве по локализации Gentoo.
Далее, нужно определить, доступна ли нам локаль UTF-8 для нашего языка или придётся её создать.
Листинг 3.1: Поиск существующей локали UTF-8
(Замените "ru_RU" своим регионом)
# locale -a | grep 'ru_RU'
ru_RU
ru_RU.UTF-8
На выходе этой команды мы должны получить хотя бы одну строку, содержащую суффикс .UTF-8. Если таковых нет, то нам придётся создать локаль, совместимую с UTF-8.
Примечание: Запускайте следующую команду, если у вас нет UTF-8 локали для вашего языка.
Листинг 3.2: Создание локали UTF-8
(Замените "ru_RU" своим регионом)
# localedef -i ru_RU -f UTF-8 ru_RU.UTF-8
Другим способом включить локаль UTF-8 является добавление её в файл /etc/locale.gen и генерация нужных локалей командой locale-gen.
Листинг 3.3: Одна из строк в /etc/locale.gen
ru_RU.UTF-8/UTF-8
Настройка локали
Есть одна переменная среды, которую необходимо установить, чтобы использовать UTF-8 локали: LANG (эту переменную также можно перезаписывать переменной LC_ALL). Есть множество способов сделать это. Некоторые люди предпочитают использовать UTF-8 только для определенного пользователя, поэтому они устанавливают эту переменную в своём ~/.profile (если используется /bin/sh), ~/.bash_profile или ~/.bashrc (если используется /bin/bash).
Другие предпочитают установить локаль глобально. Есть по крайней один весомый аргумент в пользу этого подхода — при использовании /etc/init.d/xdm, так как сценарии инициализации запускают диспетчер окон до того, как будут загружены конфигурационные файлы командной оболочки.
При установке глобальной локали должен быть использован файл /etc/env.d/02locale. Он должен выглядеть следующим образом:
Листинг 3.4: Вид /etc/env.d/02locale
(Как и всегда, замените "ru_RU.UTF-8" вашей локалью)
LANG="ru_RU.UTF-8"
Примечание: Вы можете также указывать LC_ALL вместо LANG. Так локаль устанавливается для всех категорий, включая числовые и денежные значения. На небольшом количестве систем это может вызывать некоторые проблемы. Однако, большинство пользователей может использовать LC_ALL без проблем. За дополнительными сведениями о категориях, затронутых использованием LC_ALL, пожалуйста, обращайтесь к странице локалей GNU.
Далее следует обновить среду.
Листинг 3.5: Обновление среды
# env-update
>>> Regenerating /etc/ld.so.cache...
* Caching service dependencies ...
# source /etc/profile
Теперь запустите locale без аргументов, чтобы увидеть, что у вас верные переменные среды:
Листинг 3.6: Проверка новой применённой локали
# locale
LANG=
LC_CTYPE="ru_RU.UTF-8"
LC_NUMERIC="ru_RU.UTF-8"
LC_TIME="ru_RU.UTF-8"
LC_COLLATE="ru_RU.UTF-8"
LC_MONETARY="ru_RU.UTF-8"
LC_MESSAGES="ru_RU.UTF-8"
LC_PAPER="ru_RU.UTF-8"
LC_NAME="ru_RU.UTF-8"
LC_ADDRESS="ru_RU.UTF-8"
LC_TELEPHONE="ru_RU.UTF-8"
LC_MEASUREMENT="ru_RU.UTF-8"
LC_IDENTIFICATION="ru_RU.UTF-8"
LC_ALL=ru_RU.UTF-8
Вот и всё. Теперь вы используете локаль UTF-8, и следующим этапом является настройка повседневно используемых вами приложений.
Пока Юникод делает первые шаги в мире программного обеспечения, и многобайтовые кодировки еще не включены в языки программирования, наподобие C, и множество повседневно используемых программ. Даже сейчас некоторые программы не способны работать с UTF-8 как надо. К счастью, таких не так много!
Имена файлов, NTFS и FAT
В в конфигурационном меню ядра Linux есть множество параметров NLS, но главное — не паниковать! В большинстве случаев всё, что вам нужно — включить поддержку UTF-8 NLS в ваше ядро и изменить NLS по умолчанию на utf8.
Листинг 4.1: Конфигурация ядра для UTF-8 NLS
File Systems -->
Native Language Support -->
(utf8) Default NLS Option
<*> NLS UTF8
(также <*> для других кодировок, используемых в ФС FAT или Joilet CD-ROM)
Если вы планируете монтировать разделы NTFS, то вам понадобиться указать параметр при монтировании nls=. Если вы будете монтировать разделы FAT, вам понадобится указать при монтировании параметр codepage=. Также вы можете установить для FAT кодовую страницу по умолчанию при конфигурации ядра. Помните, что параметр codepage, указываемый при монтировании, будет иметь приоритет над настройками ядра.
Листинг 4.2: Настройки FAT при конфигурировании ядра
File Systems -->
DOS/FAT/NT Filesystems -->
(866) Default codepage for fat
Не устанавливайте Default iocharset for fat в UTF-8, так как это не рекомендуется. Вместо этого укажите параметр utf8=true при монтировании раздела FAT. Для более детальной информации, смотрите man mount и документацию по ядру /usr/src/linux/Documentation/filesystems/vfat.txt.
Чтобы сменить кодировку имен файлов, используйте app-text/convmv.
Листинг 4.3: Пример использования convmv
# emerge --ask app-text/convmv
(Формат команды)
# convmv -f <current-encoding> -t utf-8 <filename>
(Замените koi8-r кодировкой, с которой хотите конвертировать)
# convmv -f koi8-r -t utf-8 filename
Для изменения содержимого файлов, используйте утилиту iconv, поставляемую вместе с glibc:
Листинг 4.4: Пример использования iconv
(Замените koi8-r кодировкой, с которой хотите конвертировать)
(Проверка верности вывода)
# iconv -f koi8-r -t utf-8 filename
(Конвертация файла, вы должны указать другое имя файла)
# iconv -f koi8-r -t utf-8 filename > newfile
Также для этой цели может быть использована утилита app-text/recode.
Системная консоль
Важно: Вам необходим >=sys-apps/baselayout-1.11.9 для поддержки Юникода в консоли.
Для включения UTF-8 в консоли вы должны отредактировать /etc/rc.conf и установить переменную UNICODE="yes". Также прочтите комментарии в этом файле — важно, чтобы в системе были шрифты с нужным диапазоном символов (если вы хотите выжать из Юникода всё).
В файле /etc/conf.d/keymaps переменной KEYMAP должна соответствовать раскладка Unicode.
Листинг 4.5: Пример файла /etc/conf.d/keymaps
(Замените "ru4" на вашу любимую раскладку)
(Для русского языка нужен ключ -u — прим. переводчика)
KEYMAP="-u ru4"
(Подмена кодировки для русского языка — прим. переводчика)
DUMPKEYS_CHARSET="koi8-r"
Важно: Помните, что для правильного отображения вам понадобятся шрифты с поддержкой Юникода. Подробнее смотрите раздел X11 и шрифты этого руководства.
А теперь выберем подходящий шрифт, поддерживающий Юникод.
Листинг 4.6: Файл /etc/conf.d/consolefont
(Отредактируйте переменную CONSOLEFONT)
CONSOLEFONT="ter-k14n" # шрифт из пакета terminus-font)
ncurses и slang
Примечание: Если вы не устанавливали или не использует slang, не принимайте во внимание упоминания о нём в этом разделе.
Будет хорошим решением добавить unicode к глобальным USE-флагам в файле /etc/make.conf, а затем при необходимости пересобрать sys-libs/ncurses и sys-libs/slang. Portage это сделает автоматически при обновлении системы:
Листинг 4.7: Обновление системы
# emerge --update --deep --newuse world
Также понадобится пересобрать пакеты, зависящие от них, раз изменения USE вступили в силу. Используемая утилита (revdep-rebuild) входит в пакет gentoolkit.
Листинг 4.8: Пересборка программ, скомпонованных с ncurses или slang
# revdep-rebuild --soname libncurses.so.5
# revdep-rebuild --soname libslang.so.1
KDE, GNOME и Xfce
Все основные графические оболочки полностью совместимы с Юникодом и не требуют дополнительной настройки, кроме той, что описана в этом документе. Все это благодаря тому, графические библиотеки (Qt и GTK+2) совместимы с UTF-8. Следовательно, все приложения, работающие на основе этих библиотек, также должны поддерживать UTF-8 без дополнительных настроек.
Исключением в этом правиле является Xlib и GTK+1. GTK+1 требует iso-10646-1 FontSpec в ~/.gtkrc, например -misc-fixed-*-*-*-*-*-*-*-*-*-*-iso10646-1. Также приложения, использующие Xlib или Xaw, нуждаются в подобной FontSpec, иначе они не буду работать.
Примечание: Если у вас установлен Центр управления gnome1, используйте его. Воспользуйтесь любым из шрифтов семейства iso10646-1.
Листинг 4.9: Пример ~/.gtkrc (для GTK+1), определяющий Юникод-совместимый шрифт
style "user-font"
{
fontset="-misc-fixed-*-*-*-*-*-*-*-*-*-*-iso10646-1"
}
widget_class "*" style "user-font"
Важно: В Xorg 6.8.2 для славянских языков эта проблема подобным образом не решается. Обратитесь к руководствам на сайтах Fantoo или Gentoo-wiki для решения данной проблемы либо откатите Xorg до версии 6.8.0.
Если приложение одинаково поддерживает Qt и GTK+2, то обычно GTK+2 GUI выдает лучшие результаты при работе с Юникодом.
X11 и шрифты
Важно: По сравнению с XFree86 x11-base/xorg-x11 лучше поддерживает Юникод, и поэтому настоятельно рекомендуется использовать именно его.
Шрифты TrueType обычно совместимы с Юникодом, и большинство шрифтов, поставляемых с Xorg, имеют великолепную поддержку кодировок, хотя не все глифы Юникода могут быть отображены для конкретного шрифта. Чтобы собрать шрифты с поддержкой Восточноазиатских алфавитов (включающие набор Bitstream Vera) для X-сервера, добавьте USE-флаг cjk. Много приложений используют этот флаг, поэтому неплохо бы внести его как постоянный флаг.
Также несколько пакетов шрифтов в Portage совместимы с Юникодом.
Листинг 4.10: Необязательно: установка некоторых Юникод-совместимых шрифтов
# emerge terminus-font intlfonts freefonts cronyx-fonts corefonts
Диспетчеры окон и терминальные эмуляторы
Диспетчеры окон, не использующие GTK или Qt, обычно очень хорошо поддерживают Юникод, так как чаще всего для отображения шрифтов используют библиотеку Xft. Если ваш диспетчер окон не использует Xft, то вы все еще можете использовать FontSpec, указанный в предыдущем разделе в качестве шрифта Юникода.
Эмуляторы терминала, использующие Xft, в большинстве случаев поддерживают Юникод. Кроме Konsole и gnome-terminal, лучшим выбором в Portage будет x11-terms/rxvt-unicode, xfce-extra/terminal, gnustep-apps/terminal, x11-terms/mlterm или чистый x11-terms/xterm, собранный с USE-флагом unicode и запускаемый как uxterm. app-misc/screen тоже поддерживает UTF-8, если запускается с параметром screen -U, или внесите следующее в файл ~/.screenrc:
Листинг 4.11: ~/.screenrc с UTF-8
defutf8 on
Vim, Emacs, Xemacs и Nano
Vim полностью поддерживает UTF-8 и к тому же автоматически определяет файлы с UTF-8. Для более детальной информации используйте в Vim :help mbyte.txt.
Emacs 22.x и выше полностью поддерживает UTF-8. Xemacs 22.x ещё не поддерживает различные кодировки.
Более старшим версиям Emacs и/или Xemacs понадобятся пакеты app-emacs/mule-ucs и/или app-xemacs/mule-ucs и добавление следующих строчек в файл ~/.emacs для поддержки CJK-языков в UTF-8:
Листинг 4.12: Emacs с поддержкой CJK UTF-8
(require 'un-define)
(require 'jisx0213)
(set-language-environment "Japanese")
(set-default-coding-systems 'utf-8)
(set-terminal-coding-system 'utf-8)
Nano полностью поддерживает UTF-8 начиная с версии 1.3.6.
Командные оболочки
На данный момент только bash полностью поддерживает Юникод через библиотеку GNU readline. Пользователи оболочки Z находятся в промежуточном положении — пока ни одна из составных оболочки еще поддерживает Юникод, хотя на данный момент ведутся усиленные работы для поддержки многобайтовых кодировок.
Оболочки C, tcsh и ksh не поддерживают UTF-8.
Irssi
Irssi полностью поддерживает UTF-8, хотя для этого требуется дополнительная настройка пользователем.
Листинг 4.13: Включение 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 для большей информации.
Man
Man-страницы являются неотъемлемой частью любой системы Linux. Чтобы удостовериться, что все страницы отображаются верно, отредактируйте /etc/man.conf и замените следующую строку.
Листинг 4.14: Изменения man.conf для поддержки Юникода
(Это старая строка)
NROFF /usr/bin/nroff -Tascii -c -mandoc
(Замените ее этой)
NROFF /usr/bin/nroff -mandoc -c
elinks и links
Это самые популярные текстовые браузеры, и вы узнаете, как установить поддержку UTF-8 для них. В elinks и links есть два способа сделать это — через меню Setup (Установки) браузера или отредактировав конфигурационный файл. Чтобы настроить параметры в самом браузере, откройте какой-нибудь сайт с помощью elinks или links и нажмите Alt+S. Вы попадете в меню настроек (Setup Menu), после чего выберите параметры терминала (Terminal options), или нажмите T. Пролистайте вниз и выберите последний параметр — UTF-8 I/O, нажав на Enter. После сохраните и выйдите из меню. В links вы можете сделать то же самое, нажав Alt+S, а затем S для сохранения. Пример конфигурационного файла показан ниже.
Листинг 4.15: Включение 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-сетях.
Листинг 4.16: Включение UTF-8 в Samba
(Отредактируйте /etc/samba/smb.conf и добавьте следующее в раздел [global])
dos charset = 866
unix charset = UTF-8
display charset = UTF-8
Проверка работоспособности
Есть множество сайтов, проверяющих UTF-8. net-www/w3m, net-www/links, net-www/elinks, net-www/lynx, все браузеры, основанные на движке Mozilla (включая Firefox) поддерживают UTF-8. Konqueror и Opera тоже полностью поддерживают UTF-8.
При использовании текстовых браузеров, удостоверьтесь, что используете совместимый с Юникодом терминал.
Если вы видите символы, отображаемые как квадратики с буквами или цифрами внутри, то это значит, что в ваших шрифтах нет соответствующего глифа для символа. Вместо этого, они отображают квадрат с шестнадцатиричным кодом символа UTF-8.
Ввод символов
Dead keys могут быть использованы для ввода символов, не отображенных на клавиатуре, в X-сервере. Для этого нужно, удерживая правый Alt (в некоторых странах он называется AltGr), нажать на дополнительную неалфавитную клавишу с символом, не являющимся буквой или цифрой (модификатор), а затем нажать на необходимую букву. Dead key изменит ее. Ввод может быть изменен также с помощью Shift при нажатых AltGr и модификаторе.
Чтобы включить dead keys в X, нужно иметь раскладку, поддерживающую их. Большинство европейских раскладок уже имеют dead keys по умолчанию. Тем не менее, они не являются настоящими североамериканскими раскладками. Хотя существуют незначительные отличия между различными раскладками, простейшим решением будет использование раскладки «en_US» вместо просто «us». Раскладка указывается в /etc/X11/xorg.conf:
Листинг 4.17: Пример раздела /etc/X11/xorg.conf
Section "InputDevice"
Identifier "Keyboard0"
Driver "kbd"
Option "XkbLayout" "en_US" # Вместо просто "us"
(Другие параметры Xkb)
EndSection
Примечание: Эти изменения нужны только в том случае, если вы используете североамериканскую раскладку либо любую другую, в которой dead keys не работают. Европейским пользователям нет нужны что-либо менять.
Изменения вступят в силу только при перезагрузке X-сервера. Чтобы изменения вступили немедленно, используйте утилиту setxkbmap, например, setxkbmap en_US.
Рассмотрим действия dead keys на примерах. Хотя результат зависит от текущей локали, сам принцип действия должен работать в нее зависимости от нее. Примеры содержат символы Юникода, так что убедитесь, что ваш браузер корректно отображает их.
При нажатии единожды нажатых AltGr и [, а затем нажатой «a» мы получаем «a». При единожды нажатых AltGr и [, а затем нажатой «e», получаем «e». Нажав на AltGr и ;, мы получим «a», а нажав AltGr и ;, а затем на «e», получаем «e».
Нажав на AltGr, Shift и [, отпустив их и нажав «a», мы получим скандинавскую «a». Также при нажатии AltGr, Shift и [, отпускании только [ и повторном ее нажатии мы получим только «?». Хотя этот символ (U+02DA) и похож на символ градуса (U+00B0), на самом деле он им не является. Подобным образом работают и другие модификаторы — нажатие AltGr and [, отпускание [ и повторное нажатие выводят «?».
AltGr может быть использована вместе с одной из алфавитных клавиш. Например, комбинация AltGr и m выводит греческую строчную букву мю: «ч». AltGr и s выводит немецкий символ эсцет: «?». Множество европейцев захотят установить сочетание AltGr и 4 (или E в зависимости от клавиатурный таблицы), выводящее символ Евро, «?» (так как на их клавиатурах он нанесен).