До появления Inno Setup 6 существовали две версии Inno
Setup: ANSI и Unicode. Начиная с Inno Setup 6 в разработке осталась
только Unicode версия Inno Setup.
Главными особенностями Unicode версии Inno Setup
являются поддержка любого языка на любой системе независимо от системной
кодовой страницы, а также поддержка файлов с именами в кодировке
Unicode.
Если вы не знаете, какую версию установили, запустите
IDE компилятора и посмотрите на заголовок окна. Если после номера версии
стоит метка "(a)", значит используется ANSI версия Inno Setup. В
противном случае используется Unicode версия Inno Setup.
По большей части обе версии используются одинаково и все различия между
ними отмечены в файле справки. Однако ниже приведены основные различия:
- Unicode версия Inno Setup поддерживает в файлах .iss и .isl
кодировку UTF-8. Начиная с Inno Setup 6.3 маркер BOM больше не является
обязательным. Кодировка UTF-16 не поддерживается.
- Все существующие языковые .isl файлы в кодировке ANSI во время
компиляции автоматически преобразуются с использованием языкового
параметра LanguageCodePage.
- Все записи [Messages] и [CustomMessages] в
существующих ANSI .iss сценариях должны быть вручную преобразованы в
кодировку Unicode, если язык использует особое значение LanguageCodePage.
- Unicode версия Inno Setup поддерживает в файлах .txt для LicenseFile,
InfoBeforeFile и InfoAfterFile кодировку UTF-8 и
UTF-16LE. Начиная с Inno Setup 6.3 маркер BOM больше не является
обязательным.
- Любой язык простых текстовых файлов в кодировке ANSI для LicenseFile,
InfoBeforeFile или InfoAfterFile во время
компиляции автоматически преобразуется с использованием языкового
параметра LanguageCodePage.
- Директива ShowUndisplayableLanguages в секции [Setup]
игнорируется Unicode версией Inno Setup.
- Существующие инсталляции ваших программ, выполненные ANSI версией
программы установки, могут быть легко обновлены Unicode версией
программы установки и наоборот.
- Примечания к программированию в кодировке Unicode:
- Компилятор Unicode рассматривает тип "String" как строку
Unicode, а тип "Char" как символ Unicode. Тип "AnsiString" не
изменился и по прежнему является строкой ANSI. Тип "PChar" был
переименован в "PAnsiChar" и в настоящее время его использование
в целом не рекомендуется.
- Компилятор Unicode более требовательный в отношении правильного
использования ";". Недостающие символы ";" считаются ошибкой.
- Изменён прототип некоторых функций: некоторые параметры функций
CreateOutputMsgMemoPage, RegQueryBinaryValue,
RegWriteBinaryValue, OemToCharBuff, CharToOemBuff,
LoadStringFromfile, SaveStringToFile и GetMD5OfString
теперь используют тип AnsiString вместо String.
- Добавлена поддержка новых функций SaveStringsToUTF8File
и GetMD5OfUnicodeString.
- Добавлен новый тип данных "Int64", который поддерживается
функцией IntToStr. Также добавлены новые функции StrToInt64,
StrToInt64Def и GetSpaceOnDisk64.
- Добавлен новый класс TStringStream.
- Если вы хотите скомпилировать сценарий, в котором используются
вызовы ANSI версии функций API Windows с помощью Unicode версии
компилятора, либо обновите вызываемые функции на Unicode версии
с индексом "W" и используя тип "String", либо сохраните вызовы
функций ANSI с индексом "A" и используйте тип "AnsiString".