您尝试记录的文件似乎是 Windows Unicode (UTF-16LE) 编码的文本文件。
您可以使用iConv 命令行并将您的文件转换为 Windows UTF-8 编码文件。
LoadStringFromFile Support Function 不能很好地加载 Unicode 字符串,它只支持加载 ANSI 和 UTF-8 编码的文本文件。
Inno Setup Compiler Debug Output 停止记录文本文件,因为它找到了一个无法加载的字符 (NULL),这就是为什么即使 LoadStringFromFile 完全加载文本文件,编译器调试输出中也只会得到“E” .
您需要下载 iConv 的安装程序,如下图所示,以获得 iConv 可执行文件和一些用于字符编码之间转换的 DLL。
下载后,安装 GnuWin32 (LibIconv for Windows) 并进入安装文件夹。
将以下四个文件复制到安装文件夹“bin”的子目录中。
他们是:
libcharset1.dll
libiconv2.dll
iconv.exe
libintl3.dll
将这些文件复制到存储 Inno 设置项目文件的目录。
然后使用以下代码进行转换。
[Files]
Source: "libcharset1.dll"; Flags: dontcopy
Source: "iconv.exe"; Flags: dontcopy
Source: "libiconv2.dll"; Flags: dontcopy
Source: "libintl3.dll"; Flags: dontcopy
[Code]
function InitializeSetup(): Boolean
var
ErrorCode: Integer;
begin
ExtractTemporaryFile('iconv.exe');
ExtractTemporaryFile('libcharset1.dll');
ExtractTemporaryFile('libintl3.dll');
ExtractTemporaryFile('libiconv2.dll');
ShellExec('Open', ExpandConstant('CMD.exe'), ExpandConstant('/C iConv -f UTF-16LE -t UTF-8 < SKINRESOURCE-INFO.inf > SKINRESOURCE-INFO-ANSI.inf'), ExpandConstant('{tmp}'), SW_HIDE, ewWaitUntilTerminated, ErrorCode);
DeleteFile(ExpandConstant('{tmp}\SKINRESOURCE-INFO.inf'));
现在LoadStringFromFile 应该正确加载文本文件,因为它现在具有 Windows UTF-8 编码。
如果您使用的是 Unicode Inno Setup,您也可以在将其转换为 Unicode 字符串(如 Log(String(RESOURCE_INFO)))后对其进行记录。