看起来您正在尝试登录的文件是Windows Unicode(UTF-16LE)编码的文本文件。
您可以使用命令行iConv并将您的文件转换为Windows UTF-8编码文件。
LoadStringFromFile
Support Function不能很好地加载Unicode字符串,它只支持加载ANSI和UTF-8编码文本文件。
Inno Setup Compiler调试输出停止记录文本文件,因为它找到了一个无法加载的字符(NULL),这就是为什么在编译调试输出中只有“E”,即使LoadStringFromFile
完全加载文本文件。
您需要下载ICONV的安装程序如下图所示得到ICONV可执行文件和使用的一些DLL文件的字符编码之间的转换。
下载后,安装的GnuWin32(libiconv的适用于Windows)并进入安装文件夹。
将以下四个文件复制到名为“bin”的安装文件夹的子目录中。
它们是:
libcharset1.dll
libiconv2。dll的
iconv.exe
libintl3.dll
这些文件复制到存储您的Inno Setup的项目文件的目录。
然后使用以下代码进行转换。
[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))
)后将其记录下来。
谢谢!奇迹般有效! – Blueeyes789
1)为什么选择ANSI?你以这种方式丢失了Unicode字符。使用UTF-8! 2)并注意ANSI与Windows-1252不一样。 ANSI编码的使用与Windows配置不同。因此,如果您明确转换为Windows-1252,但使用配置的ANSI编码加载文件,则最终会出现乱码,除非该文件仅使用ASCII字符。 3)您可以[使用PowerShell转换编码](http://stackoverflow.com/a/4817683/850848),不需要第三方工具。但无论如何,你甚至不需要任何外部工具。你可以在Pascal脚本中进行转换。 –
@MartinPrikryl纠正为UTF-8。我忘记了PowerShell。 :-( – GTAVLover