在某些机器上,我的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
?
答案 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使用的占位符。