【发布时间】: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