【问题标题】:What is "ANSI encoding" in NSIS?NSIS 中的“ANSI 编码”是什么?
【发布时间】:2022-11-25 19:42:19
【问题描述】:

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

将 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-13
      • 1970-01-01
      • 1970-01-01
      • 2015-07-08
      • 1970-01-01
      • 2011-08-05
      • 1970-01-01
      相关资源
      最近更新 更多