0

在某些机器上,我的 NSIS 安装程序会使用一个错误的字符创建文件夹。

NSIS 应该使用ń char创建一个文件夹

// U+0144   ń   c5 84   LATIN SMALL LETTER N WITH ACUTE

而是用ñ char创建了一个文件夹

// U+00F1   ñ   c3 b1   LATIN SMALL LETTER N WITH TILDE

有线部分仅在某些机器上发生,我无法重现。据我所知,这仅针对 Windows Vista(可能是基本版)进行了报道。

我怀疑这与 Windows-1250 到 UTF 的转换有关。因为 NSIS 仍然不支持 UTF,所以我使用的是 Windows-1250 编码的脚本文件。ń char 是并且0xF1应该被翻译为 UTF U+c584,但安装程序会使用U+c3b1char 创建文件夹。另一方面,U+c3b1相当于 Windows-1252 0xF1

当编译的安装程序运行时,什么可能会影响 NSIS 脚本中使用的字符的解释?如何确保预期的转化0xF1=> U+c584

4

1 回答 1

0

NSIS 源脚本的编码并不能真正决定最终的字符串,从脚本/安装程序到 unicode 字符串的字节转换发生在最终用户系统上,因此 ASCII 之外的字符可能会根据系统默认代码页而有所不同(语言为非 Unicode 程序(系统区域设置))。

您可以尝试为此目录名称创建自定义LangString 。为此,您必须在键入 ń 时将编辑器代码页设置为有问题的代码页。您可以通过System::Call kernel32::GetACP()i.r0在 .onInit 和 StrCpy 中检查 $LANGUAGE(或使用并检查 $0)来模拟这一点,该字符串在此系统上正确转换为有问题的变量。

下一个 NSIS 版本可能是 v3.0,我不知道你从哪里得到 2.50,但它可能只是 unicode fork 使用的占位符。

于 2012-04-17T21:01:41.590 回答