【问题标题】:What is "ANSI encoding" in NSIS?NSIS 中的“ANSI 编码”是什么?
【发布时间】:2022-11-25 19:42:19
【问题描述】:
我有一个使用 NSIS 3.x 安装的应用程序。安装程序将路径存储在文件中,应用程序稍后会检查该路径。路径是使用FileWrite函数写的; FileWrite 的 documentation 声明如下:
将 ANSI 字符串写入使用 FileOpen 打开的文件。如果发生写入错误,错误标志将被设置。
(如果您正在构建一个 Unicode 安装程序,该函数会进行适当的转换并写入一个 ANSI 字符串)
我知道 ANSI 是一个松散定义的术语(请参阅this question 及其许多答案)。有没有办法找出这个 NSIS 函数使用的实际编码是什么,以便我以后可以从应用程序中正确读取生成的文件?
【问题讨论】:
标签:
windows
character-encoding
nsis
codepages
【解决方案1】:
它是 ANSI 的 Windows 含义;它是当前活动/默认的 Windows 代码页。
在 NSIS v3 之前,NSIS 始终是“ANSI”。它调用了所有 API 函数的the "A" versions。在内部,每个字符串都被视为字节,没有进行任何转换。这就是为什么 FileWrite 有效地编写了 ANSI 字符串。
Unicode NSIS 安装程序在调用 FileWrite 之前调用 WideCharToMultiByte(CP_ACP, ...) 转换 Unicode 字符串。
对于 ASCII 而不是其他字符,它应该被认为是安全和可移植的。另一台机器可能配置了不同的代码页作为默认值,并且并非所有 Unicode 字符都可以正确转换。唯一的例外是 Windows 10/11 配置为默认使用 UTF-8,或者如果您 opt-in in the manifest。