Этот установщик LLVM не является установщиком Unicode NSIS.Команда LLVM может исправить это, добавив Unicode True
к своему сценарию NSIS.
Этот установщик LLVM выглядит так, как будто он поддерживает несколько языков (я не могу найти его источник, возможно, он использует CMake / Ninja), а NSIS делаетпопытайтесь угадать правильный язык, но это основано на возвращаемом значении GetUserDefaultUILanguage()
, а не на активной кодовой странице.
Я не смог воспроизвести вашу проблему в сборке 18290 (после перехода на UTF-8 и перезагрузки я подтвердилчто GetACP()
возвращает 65001), но это, вероятно, связано с тем, что NSIS распознает мою систему как английскую.
Основываясь на (N)
в вашей кнопке Next на вашем скриншоте, я собираюсь предположить, что ваш язык пользовательского интерфейсаопределяется как китайский или японский?
Без дополнительной информации о вашей системе трудно предположить, является ли это ошибкой в NSIS или Windows.NSIS является относительно нормальным приложением и не вызывает MultiByteToWideChar
в своих интерфейсных строках (IIRC).
Редактировать:
Заставив установщика выбрать японский, я могу повторить вашу проблему.Решением этой проблемы является переключение вашего «языка для программ, не поддерживающих Юникод», на японский, если вы хотите установить это приложение, используя японский язык отображения.Другое решение, которое вы можете попробовать, - установить локаль для одного приложения. AppLocale был решением Microsoft для этого, но он не поддерживается в Windows 10, но есть других альтернатив .
При сборке установщика NSIS без поддержки Unicode программа хранит текст внутри как необработанные байты, закодированные с помощью кодовой страницы определенного языка.Во время выполнения он использует такие функции, как SetWindowTextA
, чтобы установить текст элементов пользовательского интерфейса.Вот как не-Unicode-приложения работали с незапамятных времен в Windows.Все не-Unicode-программы, которые отображают текст за пределами диапазона ASCII, будут иметь ту же проблему, если только они не были специально написаны для поддержки UTF-8 в качестве активной кодовой страницы (что маловероятно, поскольку это новая функция).Эта функция полезна только для консольных приложений и портированных приложений POSIX, которые предполагают, что узкая строка имеет кодировку UTF-8.