#post-id: 8210-04-28
#original-date: 17.01.2023 Tue
#original-time: 4:28 AM
#original-day: 8210
#original-host: WinXP Home SP3 (Build 2600)
Сконвертировала гоферкарты и служебные файлы на Gopher сайте в UTF-8. Оказалось, что это требует больше усилий, чем ожидаешь. В процессе написала маленькую утилиту, которая автоматизировала конвертацию файлов.
Кстати, забавное наблюдение я сделала в ходе работы над этой утилитой. Мне нужно было сконвертировать ANSI файлы в UTF-8 файлы без BOM. А при повторном запуске на обработанном файле, как предположить, что текст уже в UTF-8, чтобы выдать предупреждение и не натворить бед? Для файлов с кириллицей решение оказалось очень простым и очень дуболомным. Если в тексте нет ни одной буквы «А», то, скорее всего, UTF-8 текст открыт как ANSI. Так-то.
Да. Кроме того, я обновила утилиту, которая автоматом генерирует списки программ для Gopher сайта из списка на обычном сайте.
А кроме того, мне пришлось погрузиться в Путон. Дело в том, что Gopher сервер у меня на нём, и для UTF-8 пришлось кое-что поправить. Скажем, у сервера есть фишка, когда он, обнаруживая на порту Гофера HTTP запрос, прикидывается HTTP сервером и выдаёт HTML вариант сайта. По умолчанию там не указывается кодировка, и я её соответствующий тэг вставляла через конфиг, где можно настроить шапку страницы. Но тэг, как оказалось, работал только в IE, поскольку вставлялся в BODY, а не в HEAD. Для ANSI контента всё было норм, но UTF-8 отображался неправильно. Пришлось лезть в исходники сервера и там править захардкоженный «шаблон».
Попутно выяснилось, что в Lagrange в менюшках почему-то не показываются внешние ссылки, хотя во всяких Gophie и OverbiteFF был полный порядок. Выяснилось, что у меня в картах используется тип элемента «h» и сама ссылка начинается с волшебной комбинации «/URL:». И эти строчки игнорировались. Я было решила, что это Lagrange не умеет такие ссылки, но потом заметила, что на других сайтах всё в порядке. Начала разбираться и выяснила, что там волшебная комбинация – «URL:», без слэша.
Немного погуглила, выяснила, что вроде бы без слэша правильно, хотя попадаются разные варианты. Ну, решила слэши поубирать. И тут выяснилось, что в клиенту всё равно прилетают карты со слэшами. Сначала думала, что это какое-то кэширование. Но, поэкспериментировав, выяснила, что все изменения в картах прекрасно прилетают на клиент. Кроме слэшей. Слэши по какой-то причине вставлял сам сервер.
Пришлось разбираться в коде на Путоне. Не то чтобы это было сложно, но...
Короче, оказалось, что сервер через два обработчика генерирует карты перед отправкой их клиенту. Первый обработчик берёт готовую карту и облагораживает её, исправляя всё, что не указал автор карты (например, вставляя в каждую строчку пропущенные хосты и порты даже для простого текста). Второй обработчик, за неимением карты, читает каталог и на основе прочитанного и дополнительных файлов генерирует эту самую карту.
Тут и происходила беда. Сервер для удобства клиента все относительные ссылки (те, что не начинались слэшем) делал абсолютными, дописывая к ним «текущий каталог». А поскольку волшебная комбинация внешней ссылки не начинается со слэша, оный в корне дописывался, а в подкаталогах вообще дописывался полный путь. Ссылка, разумеется, портилась. И только вариант со слэшем пропускался и не портился. А о том, что в сервере есть такой баг, я не знала, поскольку использовала только вариант со слэшем.
В итоге пришлось поправить код, чтобы внешние ссылки игнорировались. Более того, для тех, у которых в начале был слэш, я сделала фикс, чтобы этот слэш убирался. Поэтому, даже если в карте используется слэш, Lagrange об этом не узнаёт, и показывает ссылку правильно. Не то чтобы много кода, но всё равно пришлось немного наловчиться.
Кстати, везде в коде, где сервер сам проверяет, не внешняя ссылка ли у нас там, регэксп учитывает, что в начале волшебного кода может быть, а может и нет, слэш.
Короче, многовато работы для простого перехода на UTF-8.
Кстати, из всех клиентов в итоге отвалился OverbiteFF, который так и не смог правильно определить UTF-8 в картах. Показывает крякозябры. Зато OverbiteNX начал работать и показывать менюшки! /* Хотя и не показывает блок с пожертвованиями. Видать, «URL'ы» на кошельки не нравятся. */
https://gopher.floodgap.com/overbite/
Да. Заглядывайте ^^
gopher://gopher.lindachan.net