NSIS安装程序使用错误的字符集创建目录

时间:2012-04-17 10:11:17

标签: windows character-encoding nsis

在某些机器上,我的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编码的脚本文件。 字符为0xF1,应转换为UTF U+c584,但安装程序会创建U+c3b1字符的文件夹。另一方面,U+c3b1相当于Windows-1252 0xF1

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

1 个答案:

答案 0 :(得分:0)

NSIS源脚本的编码并不真正决定最终字符串,在最终用户系统上发生从脚本/安装程序到unicode字符串的字节转换,因此ASCII之外的字符可能因系统默认代码页而异(Language for non-Unicode programs (System Locale))。

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

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