Я хочу создать 32-битный x86 ISO-образ из buildroot, который может отображать символы Unicode. Как это сделать?
- В
make menuconfig
, я установилBR2_ENABLE_LOCALE_WHITELIST="C en_US en_US.UTF-8"
- В
make busybox-menuconfig
, я установилCONFIG_UNICODE_SUPPORT=y
,CONFIG_UNICODE_USING_LOCALE=y
,CONFIG_FEATURE_CHECK_UNICODE_IN_ENV=y
,CONFIG_UNICODE_COMBINING_WCHARS=y
,CONFIG_UNICODE_WIDE_WCHARS=y
,CONFIG_UNICODE_BIDI_SUPPORT=y
,CONFIG_UNICODE_NEUTRAL_TABLE=y
,CONFIG_UNICODE_PRESERVE_BROKEN=y
- На компилирующей машине (на базе Debian) я установил пакет
locales
и запустилsed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen; locale-gen
Однако при создании изображения текст Unicode, сохраненный в текстовых файлах или введенный в терминал, искажается.
Один из способов тестирования — запуск echo -e '\xe2\x82\xac'
в оболочке. Это должно вывести символ евро, что и происходит на терминале моего Mac. Однако в полученном образе iso я вижу:
unfortunate # echo -e '\xe2\x82\xac'
â¬
Более полный контекст
- Мой главный проект здесьhttps://github.com/mrled/unfortunate/(обратите внимание на подмодули)
- Файл defconfig, который я использую, находится по адресуhttps://github.com/mrled/unfortunate-browser-vm/blob/03dfb210d57a0e665da5cee108c2d9c052d66f5b/buildroot-v86/configs/v86_defconfig
- Конфигурация busybox, которую я использую, находится по адресуhttps://github.com/mrled/unfortunate-browser-vm/blob/03dfb210d57a0e665da5cee108c2d9c052d66f5b/buildroot-v86/board/v86/busybox.config
- Конфигурация ядра, которую я использую, находится по адресуhttps://github.com/mrled/unfortunate-browser-vm/blob/03dfb210d57a0e665da5cee108c2d9c052d66f5b/buildroot-v86/board/v86/linux.config
- Этот проект на самом деле предназначен для запуска в браузерном (клиентском!) эмуляторе x86 v86, так что вы можете
echo
сами попробовать мою команду по адресуhttps://unfortunate.micahrl.com(Загрузка виртуальной машины может занять 15–30 секунд.)
решение1
на Debian есть некий unicode_start
скрипт оболочки, который настраивает систему для UTF-8. Основные команды, которые вы должны выполнить в своей оболочке, следующие:
printf '\033%%G'
stty iutf8
Я нашел их в очень интересной ветке StackExchange:Как включить поддержку UTF-8 в консоли Linux?
Я также испытываю трудности с настройкой Unicode в моей системе buildroot, и эти команды немного помогли, но я все еще сталкиваюсь с проблемами со скриптами оболочки, закодированными в UTF-8, которые отказываются корректно выполняться в моей целевой системе.
Надеюсь, это поможет! Ура, Хьюз