2012-04-17 2 views
0

На некоторых машинах мой установщик NSIS создает папку с одним неправильным символом.Установщик NSIS создает каталог с использованием неправильного набора символов

НСИ должен был создать папку с ń полукокса

// U+0144 ń c5 84 LATIN SMALL LETTER N WITH ACUTE 

, но вместо этого создал папку с ñ полукокса

// U+00F1 ñ c3 b1 LATIN SMALL LETTER N WITH TILDE 

Проводная часть является то, что происходит только на некоторых машины, и я не мог воспроизвести это. Насколько я могу судить, это было сообщено только для Windows Vista (возможно, базового издания).

Я подозреваю, что это как-то связано с преобразованием Windows-1250 в UTF. Поскольку NSIS по-прежнему не поддерживает UTF, я использую файл сценария с кодировкой Windows-1250. Обозначение ń равно 0xF1 и должно быть переведено в UTF U+c584, но вместо этого установщик создает папку с U+c3b1 char. С другой стороны, U+c3b1 эквивалентен Windows-1252 0xF1.

Что может повлиять на интерпретацию символов, используемых в скрипте NSIS, когда выполняется скомпилированный установщик? Как обеспечить ожидаемое преобразование 0xF1 =>U+c584?

+0

Чтобы все было ясно - я бы не хотел использовать ветку uNSIS, поскольку у нее все еще есть нерешенные проблемы. Я терпеливо жду официального выпуска NSIS 2.50. И мальчик, я жду с 2009 года! – SiliconMind

+1

Какие нерешенные проблемы у вас есть с NSISU? У меня не было никаких проблем с этим; это все, что мы используем сейчас на портале PortableApps.com. –

ответ

0

Кодирование исходного сценария NSIS на самом деле не определяет окончательную строку, перевод байтов из сценария/установщика в строку unicode происходит в системе конечных пользователей, поэтому символы вне ASCII могут варьироваться в зависимости от системных значений по умолчанию кодовая страница (Language for non-Unicode programs (System Locale)).

Вы можете попытаться создать таможню LangString для этого имени каталога. Для этого вам нужно установить кодовую страницу редакторов в проблемную кодовую страницу при вводе ń. Вероятно, вы можете эмулировать это путем проверки $ LANGUAGE (или использовать System::Call kernel32::GetACP()i.r0 и проверить $ 0) в .onInit и StrCpy строку, которая правильно переводит эту систему в проблемную переменную.

Следующая версия NSIS, вероятно, будет v3.0, я не знаю, где вы получили 2.50, но это, вероятно, просто местозаполнитель, используемый вилкой Unicode.

+0

Я начинаю сомневаться, что мы увидим следующий выпуск NSIS. Номер версии 2.50 - это документы NSIS, которые, как представляется, опережают официальную версию: http://nsis.sourceforge.net/Docs/Chapter1.html#1.4 - это даже относится к работе с поддержкой unicode. – SiliconMind

+0

@SiliconMind: он-лайн документы из SVN. Сегодня вы можете скомпилировать рабочую версию unicode из магистрали, но она очень похожа на вилку, поэтому вы можете просто использовать ее. – Anders

Смежные вопросы