Добро пожаловать, Гость. Пожалуйста авторизуйтесь здесь.
FGHIGate на GaNJa NeTWoRK ST@Ti0N - Просмотр сообщения в эхоконференции RU.GOLDED
Введите FGHI ссылку:


Присутствуют сообщения из эхоконференции RU.GOLDED с датами от 16 Jul 13 03:28:02 до 16 Nov 24 03:28:00, всего сообщений: 3632
Ответить на сообщение К списку сообщений Предыдущее сообщение Следующее сообщение
= Сообщение: 3514 из 3632 ======================================== RU.GOLDED =
От   : Vitaliy Aksyonov                 1:104/117          17 Mar 24 13:26:44
Кому : All                                                 17 Mar 24 13:26:44
Тема : Борьба с псевдографикой
FGHI : area://RU.GOLDED?msgid=1:104/117+65f7442f
= Кодировка сообщения определена как: CP866 ==================================
Ответ: area://RU.GOLDED?msgid=1:104/117+65f7499f
==============================================================================
Привет, All!

* Originally in ru.golded
* Crossposted in pvt.luna.local

По результатам долгих исследований, как же так получается, что у меня нормально выводится псевдографика, а у Нила нет, решил написать небольшую инструкцию, как сделать так, чтобы правильно отображались символы с кодами больше 127. То есть это национальные алфавиты и та самая псевдографика.

Сразу оговорюсь, что это для линукса (скорее всего очень похоже и для MacOS), однобайтовых кодировок и локалей. Про юникод здесь нет ничего. Хотя я планирую разобраться, как можно выводить юникод с существующим кодом. Есть ненулевая вероятность, что это возможно.

Итак, если у вас есть проблемы с выводом псевдографики, или вообще проблемы с выводом неанглийских символов в GoldEd, надо проверить несколько вещей. Я буду приводить примеры с KOI8-R, но должно так же без проблем работать и с CP866, CP437, CP1125 и других однобайтовых кодировках.

Также моя инструкция подразумевает, что не используются никакие перекодировщики (вроде luit) или терминал мультиплексоры (screen, tmux).

1. Убедитесь, что ваш терминал использует правильную кодировку. Я пробовал и удаленный доступ через ssh (Putty) и локальную консоль (гномовский терминал). В обоих случаях я выбрал KOI8-R в качестве кодировки.

2. Попробуйте выполнить вот такой простой скрипт:

printf '%b' $(printf '\\%03o' {128..255})

Он должен выдать вам последовательность русских букв, символов псевдографики и несколько специальных символов. Если выводятся квадраты, знаки вопроса или другой бред - разбирайтесь с настроками терминала. Это кодировка и шрифт.

3. Очень важно, чтобы при запуске GoldEd была выбрана правильная локаль. В моём случае это ru_RU.koi8r. Может отличаться в зависимости от системы. Тут еще надо понимать, что совсем необязательно менять локаль для всей системы. Локаль - это свойство процесса и можно просто запустить GoldEd в локали, отличной от системной. Что я и делаю вот так:

LANG=ru_RU.koi8r gedlnx -C<path to my config>

Также обязательно проверьте, что такая локаль в системе вообще есть. Узнать это можно, выполнив команду locale -a. Если нужной локали в вашей системе нет - читайте документацию к дистрибутиву, как доставить или сгенерировать нужные локали.

Этого должно быть достаточно, чтобы псевдографика отлично показывалась.

В чём же проблема, когда выбрана "неправильная" локаль. Дело в том, что ncurses (библиотека, которую GoldEd использует для вывода текста) пытается определить, является ли каждый выводимый символ "печатаемым". И делает это с помощью функций isprint и iscntrl. Так вот, когда локаль не соответствует выводимому тексту, то символы псевдографики распознаются как непечатные. В этом случае ncurses конвертирует их с помощью специальной таблицы в последовательности вроде M~D, где первый символ - это Ctrl, Alt, а дальше английская буква.

Еще несколько моментов. У меня нормально завелась связка с запуском GoldEd через luit. Но я предпочитаю запускать его напрямую.

Надеюсь, что эта инструкция поможет кому-то ещё. Ну и для себя прикопаю на будущее.

Best regards,
Vitaliy Aksyonov.

... Я больше не пью... И меньше тоже!
--- GoldED+/LNX 1.1.5-b20240305-beta
* Origin: Aurora, Colorado (1:104/117)

К главной странице гейта
Powered by NoSFeRaTU`s FGHIGate
Открытие страницы: 0.040899 секунды