【问题标题】:How does InnoSetup handle INI file encoding [duplicate]InnoSetup 如何处理 INI 文件编码 [重复]
【发布时间】:2020-09-02 16:17:42
【问题描述】:

我在 InnoSetup 脚本的 [INI]-Section 中有一个常规条目

例如

[INI]
Filename: "{app}\myinifile.ini"; Section: "MY_SECTION"; Key: "MY_KEY"; String: "value which contains a symbol (§) that is different between ascii and UTF-8 encoding: §" 

现在,在某些系统上,如果创建了 INI 文件,段落符号 ("§") 将作为预期的 ascii 处理,而在其他系统上则转换为 UTF-8。

事实上,如果我分析这些文件的确切内容。

通常我有:§ =>“47”(十六进制)
但在某些系统上以某种方式:§ =>“C2 47”(十六进制),这是“§”的 UTF-8 表示
但为什么会有这种差异?

我认为 Inno Setup 使用 Win-API 中的常规 WritePrivateProfilString。我在 Win-Api 中找到了这个:

winbase.h 标头将 GetPrivateProfileString 定义为别名 自动选择此函数的 ANSI 或 Unicode 版本 基于 UNICODE 预处理器常量的定义。

但是:如何告诉 Inno Setup 始终使用它的 ANSI 变体?

【问题讨论】:

  • 我假设 INNO 将尊重 INI 文件的编码(如果它已经存在)并通过查看 BOM 使用正确的 Write... 方法。但我不知道Inno的来源。我相信其他人会发表评论。
  • 是的,Inno Setup 使用 WritePrivateProfileString。 – 但是您引用的评论是关于函数的 API,而不是关于 INI 文件的编码。这与您的问题无关。 – 一般来说,我认为 Windows API 不支持 INI 文件的 UTF-8 编码。另见Save INI file in UTF-8 rather than ANSI in Inno Setup。还有它链接的问题:How to read/write Chinese/Japanese characters from/to INI files?.
  • 另外,您的报价肯定适用于编译后的可执行文件。假设您与该 exe 一起使用的任何 INI 文件肯定会以相同的方式编码。走下坡路:) 我会等着看其他人怎么说。 :)
  • @MartinPrikryl INI 文件确实支持编码,但像这样:imgur.com/0HTLww9
  • @AndrewTruckle 我更正了我的评论:“我相信 Windows API 不支持 INI 文件的 UTF-8 编码”。当然,INI 文件是一个文本文件,你可以使用其他软件将文本文件的编码更改为你喜欢的任何内容。但我相信您将无法使用 Windows API(因此使用 Inno Setup)正确读取此类 INI 文件。我的链接答案已经说了。

标签: inno-setup


【解决方案1】:

已解决,在另一个线程上,因为你是对的,它与 InnoSetup 没有直接关系,请参阅:

https://stackoverflow.com/a/63989920/10934555

无论如何,非常感谢,InnoSetup 摇滚 :-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-23
    • 2011-09-28
    • 2015-01-26
    • 2014-05-30
    • 2013-06-14
    • 2013-01-08
    • 2015-01-13
    • 1970-01-01
    相关资源
    最近更新 更多