windows 什么是NSIS中的“ANSI编码”?

72qzrwbm  于 2022-11-26  发布在  Windows
关注(0)|答案(1)|浏览(255)

我有一个使用NSIS 3.x安装的应用程序。安装程序在一个文件中存储了一个路径,该路径稍后将由应用程序检查。该路径是使用FileWrite函数写入的; FileWritedocumentation声明如下:
将ANSI字串写入以FileOpen开启的档案。如果写入时发生错误,将会设定错误旗标。
(If您正在构建Unicode安装程序,该函数将进行适当的转换并写入ANSI字符串)
我知道ANSI是一个定义松散的术语(请参阅this question及其许多答案)。是否有办法找出此NSIS函数实际使用的编码,以便我以后可以从应用程序中正确读取生成的文件?

h79rfbju

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文件:

FileOpen $0 $INSTDIR\cfg.ini a
FileWriteUTF16LE /BOM $0 "" ; Make sure it has a BOM
FileClose $0
WriteIniStr $INSTDIR\cfg.ini Paths App $InstDir

相关问题