繁体   English   中英

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

[英]What is "ANSI encoding" in NSIS?

我有一个使用NSIS 3.x安装的应用程序。 安装程序将路径存储在文件中,应用程序稍后会检查该路径。 使用FileWrite写入路径function; FileWrite文档说明如下:

将 ANSI 字符串写入使用 FileOpen 打开的文件。 如果发生写入错误,错误标志将被设置。

(如果您正在构建 Unicode 安装程序,则 function 会进行适当的转换并写入 ANSI 字符串)

我知道 ANSI 是一个松散定义的术语(请参阅 此问题及其许多答案)。 有没有办法找出这个 NSIS function 使用的实际编码是什么,以便我以后可以从应用程序中正确读取生成的文件?

就是ANSI的Windows的意思; 它是当前活动/默认的 Windows 代码页。

在 NSIS v3 之前,NSIS 始终是“ANSI”。 它调用了所有 API 函数的“A”版本 在内部,每个字符串都被视为字节,没有进行任何转换。 这就是FileWrite有效写入 ANSI 字符串的原因。

Unicode NSIS 安装程序调用WideCharToMultiByte(CP_ACP, ...)在调用FileWrite之前转换 Unicode 字符串。

对于 ASCII 而不是其他字符,它应该被认为是安全和可移植的。 另一台机器可能配置了不同的默认代码页,即使在同一台机器上,也并非所有 Unicode 字符都可以正确转换。 唯一的例外是 Windows 10/11 配置为使用 UTF-8 作为默认值,或者如果您在清单中选择加入

如果您正在安装的应用程序也启用了 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM