Проблема с кириллицей при использовании Curses::UI под FreeBSD 14
Нужно было сделать небольшой интерфейс с помощью Curses::UI.
Я набросал небольшой пример на Perl5:
use strict;
use warnings;
use utf8;
use Term::ReadKey;
use Curses::UI;
use POSIX qw(setlocale LC_ALL); # Импортируем setlocale и LC_ALL
use open qw(:std :encoding(UTF-8));
# Устанавливаем локаль для поддержки кириллицы
setlocale(LC_ALL, "ru_RU.UTF-8");
binmode STDERR, ':encoding(UTF-8)';
binmode STDOUT, ':encoding(UTF-8)';
# Создаем объект интерфейса
my $cui = Curses::UI->new(-color => 1);
# Получаем размеры терминала
my ($max_x, $max_y) = GetTerminalSize(); # Устанавливаем размеры окна
# Вычисляем координаты для центрирования окна
my $start_y = int(($max_y - 25) / 2);
my $start_x = int(($max_x - 80) / 2);
# Создаем окно
my $window = $cui->add(
'main_window',
'Window',
-border => 1,
-title => 'Центрированное окно',
-width => 80,
-height => 25,
-y => $start_y,
-x => $start_x,
);
# Создаем список элементов
my @items = ("Элемент 1", "Элемент 2", "Элемент 3", "Элемент 4", "Элемент 5",
"Элемент 6", "Элемент 7", "Элемент 8", "Элемент 9", "Элемент 10",
"Элемент 11", "Элемент 12", "Элемент 13", "Элемент 14", "Элемент 15");
# Добавляем список в окно
$window->add(
'item_list',
'Listbox',
-values => \@items,
-label => 'Выберите элемент:',
-width => 78, # Ширина списка
-height => 20, # Высота списка
-onchange => sub {
my $selected_item = $window->get('item_list')->get();
$cui->message('Выбранный элемент', "Вы выбрали: $selected_item");
},
);
# Запускаем интерфейс
$cui->set_binding(sub { exit }, 'q'); # Выход по нажатию 'q'
$cui->mainloop();
Все это делал под FreeBSD 14.1. И замечаю, что часть русского текста выводится "битой". Вот скрин:
Эксперименты с локалями и бубнами не помогли. Решил посмотреть как это работает на других моих системах, которые я изредка пользую. Точно такую же картину получил на предыдущей версии FreeBSD 14.0 и на Linux Debian. Один в один. Да, все эти системы предварительно полностью обновил на сегодняшнее утро.
FreeBSD freebsd-14.1 14.1-RELEASE-p4 FreeBSD 14.1-RELEASE-p4 GENERIC amd64
FreeBSD freebsd-14 14.0-RELEASE-p10 FreeBSD 14.0-RELEASE-p10 #0: Wed Sep 4 08:24:14 UTC 2024 GENERIC amd64
Linux debian-pc 6.1.0-25-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.106-3 (2024-08-26) x86_64 GNU/Linux
А вот ArchLinux и Linux Manjaro порадовали - там всё ровно получилось!
Linux archlinux-pc 6.10.8-arch1-1 #1 SMP PREEMPT_DYNAMIC Wed, 04 Sep 2024 15:16:37 +0000 x86_64 GNU/Linux
Linux majestio-pc 6.6.47-1-MANJARO #1 SMP PREEMPT_DYNAMIC Mon Aug 19 09:51:26 UTC 2024 x86_64 GNU/Linux
Вопрос: по сути очевидный - "куда копать"?
Мне вообще-то нужно только под FreeBSD. Я понимаю, что можно легко отказаться от русского языка, сделать на английском. Но не хочется от проблем убегать. Есть какие мысли?