我有一个使用NSIS 3.x安装的应用程序。安装程序在一个文件中存储了一个路径,该路径稍后将由应用程序检查。该路径是使用FileWrite
函数写入的; FileWrite
的documentation声明如下:
将ANSI字串写入以FileOpen开启的档案。如果写入时发生错误,将会设定错误旗标。
(If您正在构建Unicode安装程序,该函数将进行适当的转换并写入ANSI字符串)
我知道ANSI是一个定义松散的术语(请参阅this question及其许多答案)。是否有办法找出此NSIS函数实际使用的编码,以便我以后可以从应用程序中正确读取生成的文件?
1条答案
按热度按时间h79rfbju1#
它是ANSI的Windows含义;它是当前活动/默认的Windows代码页。
在NSIS v3之前,NSIS总是“ANSI”。它调用所有API函数的the "A" versions。在内部,每个字符串都被当作字节,没有进行任何转换。这就是为什么
FileWrite
可以有效地编写ANSI字符串。Unicode NSIS安装程式会先呼叫
WideCharToMultiByte(CP_ACP, ...)
来转换Unicode字串,然后再呼叫FileWrite
。它应该被认为是安全的和可移植的ASCII,但不是其他字符。另一台机器可能配置了不同的代码页作为默认值,并不是所有的Unicode字符可以正确转换,即使在同一台机器上。唯一的例外是Windows 10/11配置为使用UTF-8作为默认值,或者如果您opt-in in the manifest。
如果您安装的应用程序也启用了Unicode,则应使用
FileWriteUTF16LE
。您还可以编写Unicode .ini文件: