【问题标题】:NSIS installer creates directory using wrong character setNSIS 安装程序使用错误的字符集创建目录
【发布时间】:2012-04-17 10:11:16
【问题描述】:

在某些机器上,我的 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

【问题讨论】:

  • 为了清楚起见 - 我不想使用 uNSIS 分支,因为它仍有一些未解决的问题。我正在耐心等待 NSIS 2.50 的正式发布。男孩,我从 2009 年就开始等待了!
  • NSISU 有哪些未解决的问题?我没有任何问题;这就是我们现在在 PortableApps.com 上使用的全部内容。

标签: windows character-encoding nsis


【解决方案1】:

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

【讨论】:

  • 我开始怀疑我们是否会看到下一个 NSIS 版本。 2.50 版本号来自 NSIS 文档,这似乎比正式发布要早:nsis.sourceforge.net/Docs/Chapter1.html#1.4 - 哎呀,这些甚至指的是工作 unicode 支持。
  • @SiliconMind:在线文档来自 SVN 主干。你现在可以从主干编译一个工作的 unicode 版本,但它与 fork 非常相似,所以你不妨直接使用它。
猜你喜欢
  • 1970-01-01
  • 2012-04-13
  • 1970-01-01
  • 2016-05-04
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 2014-08-30
  • 1970-01-01
相关资源
最近更新 更多