До появления 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 версии Inno Setup,
могут быть без проблем обновлены 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.