2012-04-17 72 views
0

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

的NSIS本来是要创建ń焦炭

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

的文件夹,而是创建一个文件夹ñ焦炭

// 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 char的文件夹。另一方面,U+c3b1相当于Windows-1252 0xF1

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

+0

为了说清楚 - 我不想使用uNSIS分支,因为它仍然存在一些未解决的问题。我耐心等待官方NSIS 2.50发布。和男孩,我从2009年开始等待! – SiliconMind 2012-04-17 10:14:02

+1

你有什么未解决的问题与NSISU?我没有遇到任何问题;这是我们现在在PortableApps.com上使用的所有内容。 – 2012-04-17 10:47:05

回答

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使用的占位符。

+0

我开始怀疑我们会看到下一个NSIS发布。 2.50的版本号来自NSIS文档,它似乎比官方发布的版本要早:http://nsis.sourceforge.net/Docs/Chapter1.html#1.4 - 这些甚至指的是工作unicode支持。 – SiliconMind 2012-04-19 09:22:40

+0

@SiliconMind:在线文档来自SVN主干。你可以从trunk中编译一个工作的unicode版本,但它与fork非常相似,所以你可以使用它。 – Anders 2012-04-19 15:39:17