кодировки, карты соответствия и недостающий пазл
Здравствуйте.
Решил вот тут на Gentoo перебраться и почти сразу начались проблемы с локализацией консоли.
Так вот, хочу для начала разобраться с простыми кодировками, не трогая utf. Собственно, в официальной документации Gentoo как раз описывается процесс русификации консоли в кодировке koi8-r.
Вкратце, весь принцип сводится к следующему: у нас есть контроллер клавиатуры, для которого нужно указать раскладку в нужной кодировке и есть устройтсво вывода, для которого также нужно указать шрифт в нужной кодировке. Если кодировки обоих устройств совпадают, то всё должно работать. Раскладка клавиатуры в koi8-r — ru4. Шрифт в той же кодировке — koi8r-8x16. Consoletranslation закомментирован. Unicode в rc.conf отключён.
Но ничего не работает. Вместо русского текста пишется непонятно что.
Я методом тыка подобрал карту соответствия koi8-r_to_uni и всё стало нормально работать.
Вопрос: ПОЧЕМУ?
Если у нас раскладка клавиатуры соответсвует кодировке koi8-r и шрифт тоже, зачем вообще карта соответствия и причём тут unicode? Зачем koi8-r ассоциировать с ним?
Если же следовать инструкции, описываемой на страничке локализации Gentoo, а именно в качестве шрифта консоли указать cp866-8x16, а карту соответствия выставить в koi2alt, то всё работает. Но опять же вопрос: ПОЧЕМУ?
Handbook говорит, что koi2alt ассоциирует кодировку cp866 с кодировкой koi8-r, но в само́́м файле koi2alt написано иначе. А именно, там два столбца: «Internal value - cp866/koi8-r» и «Output value - ISO 8859-5», а также пометка: «Из-за того, что ко́́ды символов в кодировках koi8-r и cp866 практически не пересекаются, мы можем их одновременно преобразо́́вывать в ISO 8859-5». То есть в нашем случае файл koi2alt фактически ассоциирует не koi8-r с cp866, а либо cp866 с ISO 8859-5, либо koi8-r с ISO 8859-5. Скорее второе.
Как и в прошлом случае с юникодом, здесь также вылезает побочная кодировка, а именно ISO 8859-5. Откуда она взялась?
Подытожив всё вышесказанное, в двух словах сформулирую суть:
Когда у нас две кодировки выставлены в koi8-r, то системе для работы необходима карта соответствия koi8-r — юникод.
Когда у нас одна кодировка — cp866, а вторая — koi8-r, то системе для работы необходима карта соответствия... то ли koi8-r — ISO 8859-5, то ли cp866 — ISO 8859-5 (непонятно точно из-за "универсальности" файла карты соответствий) ?
По ходу я что-то упускаю и не учитываю ещё какое-то промежуточное событие, которое не упоминается в документации. Подскажите в чём прикол.
Главный вопрос: чем объясняется необходимость использования таких противоречивых карт соответствия. Они ломают всю мою логику понимания.
P.S. Когда в keymaps перед раскладкой указываю параметр -u:
keymap="-u ru4"
то выдаётся предупреждение о том, что «Вы загружаете юникодную раскладку на НЕюникодной консоли!» и русский язык перестаёт работать.
Почему раскладки ru1-ru4 оказывается... юникодные? АААА!
ಥ_ಥ Мой мозг разбивается вдребезги.
- Для комментирования войдите или зарегистрируйтесь
# /etc/locale.gen: list all
# /etc/locale.gen: list all of the locales you want to have on your system is a locale located in /usr/share/i18n/locales/ and is a charmap located in /usr/share/i18n/charmaps/.
#
# The format of each line:
#
#
# Where
# where
#
# All blank lines and lines starting with # are ignored.
#
# For the default list of supported combinations, see the file:
# /usr/share/i18n/SUPPORTED
#
# Whenever glibc is emerged, the locales listed here will be automatically
# rebuilt for you. After updating this file, you can simply run `locale-gen`
# yourself instead of re-emerging glibc.
# /etc/locale.gen: list all of the locales you want to have on your system is a locale located in /usr/share/i18n/locales/ and is a charmap located in /usr/share/i18n/charmaps/.
#
# The format of each line:
#
#
# Where
# where
#
# All blank lines and lines starting with # are ignored.
#
# For the default list of supported combinations, see the file:
# /usr/share/i18n/SUPPORTED
#
# Whenever glibc is emerged, the locales listed here will be automatically
# rebuilt for you. After updating this file, you can simply run `locale-gen`
# yourself instead of re-emerging glibc.
PS : Впритык не вижу здесь "камня преткновения", который бы мешал [хоть-какбы работе на Дженте.Выставляйте поддерживаемые чарстеры и юзайте на здоровье.
知る者は言わず言う者は知らず
"Бабло, побеждает даже зло"
Эмм... Я что-то не очень
Эмм... Я что-то не очень понял к чему Вы процитировали какое-то описание locale.gen-файла.
У меня локаль выставлена в ru_RU.KOI8-R.
То есть Вы советуете проигнорировать непонимание (и несколько дней "долбления головой об ствену", как показатель безнадёжности) и идти дальше? Как-то это не по-гентушному.
Ужасный совет! Фууу!!!
Я советовал выставить
Я советовал выставить ПОДДЕРЖИВАЕМЫЕ ОФФИЦАЛЬНО кодировки и не парить себе мозг что да как!
Остальное читаем здесь
вкратце :
Users wishing to view cyrillic glyphs had to choose between KOI8-R for Russian and Bulgarian or KOI8-U for Ukrainian, as well as all the other cyrillic encodings such as the unsuccessful ISO 8859-5, and the common Windows-1251 set. All of these character sets broke most compatibility with ASCII (although KOI8 encodings place cyrillic characters in Latin order, so in case the eighth bit is stripped, text is still decipherable on an ASCII terminal through case-reversed transliteration.)
知る者は言わず言う者は知らず
"Бабло, побеждает даже зло"
MarkSW написал(а): То есть
В свое время долго засиделся на кодировке koi-8r
Помню при обновлении на ядро 2.6.24 ну никак на выходило в консоле победить вывод. Может с того времени сейчас многое поменялось, но тогда камнем преткновения явилось
То есть при загрузке необходимо передать ядру параметр
vt.default_utf8=0
Проверять это я, естественно, не буду. Но может это как-то поможет разобраться в "Как-то это не по-гентушному".
Вот кстати и ссылка.
тра-ла-ла
Kevol, спасибо за наводку. Буду разбираться.