Мы используем Inno Setup (Unicode-версия) для создания пакета ресурсов (или «примеров») для нашего продукта. Программная часть нашего продукта знает расположение образцов по файлу, который записывается установщиком образцов. На данный момент это реализовано простым способом:
procedure CurStepChanged(CurStep: TSetupStep);
begin
if ( CurStep = ssPostInstall) then
begin
ForceDirectories(ExpandConstant('{userappdata}\MyCompany\MyApp'))
SaveStringToFile(ExpandConstant('{userappdata}\MyCompany\MyApp\SamplePath.txt'), ExpandConstant('{app}'), False);
end;
end;
У этого простого способа есть фатальная проблема: установщик запускается на китайском языке Windows, и все это работает в кодировке GBK, но наш продукт построен на базе UTF8.
После некоторого поиска я нашел решение, вызвав Windows WideCharToMultiByte
внутри кода Pascal. Однако это не сработает, поскольку требует ввода UTF16, но у меня есть GBK.
Кроме того, Inno Setup также не будет работать с существующим именем файла UTF8 в моем SamplePath.txt . Если я вручную отредактирую файл SamplePath.txt , чтобы заполнить китайские буквы в кодировке UTF8, и инициализирую встроенный код app
с помощью следующего кода, он отобразит грязные символы на странице выбора каталога:
[Setup]
DefaultDirName={code:GetPreviousSampleDir}
[code]
function GetPreviousSampleDir(Param: String): String;
var
tmp: AnsiString;
begin
if FileExists( ExpandConstant('{userappdata}\MyCompany\MyApp\SamplePath.txt') ) then
begin
LoadStringFromFile(ExpandConstant('{userappdata}\MyCompany\MyApp\SamplePath.txt'), tmp)
Result := tmp
end
else
begin
Result := 'D:\MyApp_samples'
end;
end;
Так есть ли способ загрузить / сохранить имя файла с символами i18n в UTF8?