inno-setup – Inno Setup Pascal Script – 读取UTF-16文件
我有一个从Resource Hacker导出的.inf文件.该文件采用UTF-16 LE编码.
EXTRALARGELEGENDSII_INI TEXTFILE "Data.bin" LARGEFONTSLEGENDSII_INI TEXTFILE "Data_2.bin" NORMALLEGENDSII_INI TEXTFILE "Data_3.bin" THEMES_INI TEXTFILE "Data_4.bin" 当我使用 procedure LoadResources; var RESOURCE_INFO: AnsiString; begin LoadStringFromFile(ExpandConstant('{tmp}SKINRESOURCE - INFO.inf'),RESOURCE_INFO); Log(String(RESOURCE_INFO)); end; 我在调试输出中得到这个: E 请告诉我如何解决这个问题. 提前致谢. 解决方法
您尝试记录的文件似乎是Windows Unicode(UTF-16LE)编码文本文件.
您可以使用iConv命令行并将文件转换为Windows UTF-8编码文件.
Inno Setup编译器调试输出停止记录文本文件,因为它找到了一个无法加载的字符(NULL),这就是为什么在编译器调试输出中只得到“E”,即使LoadStringFromFile完全加载文本文件. 您需要下载iConv的安装程序,如下所示,以获取iConv可执行文件和一些用于在字符编码之间进行转换的DLL. 下载后,安装GnuWin32(适用于Windows的LibIconv)并转到安装文件夹. 复制安装文件夹“bin”中子目录内的四个文件. 他们是: libcharset1.dll libiconv2.dll iconv.exe libintl3.dll 将这些文件复制到存储Inno Setup Project文件的目录中. 然后使用以下代码进行转换. [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))后将其记录下来. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |