Inno setup InnoSetup如何处理INI文件编码

Inno setup InnoSetup如何处理INI文件编码,inno-setup,Inno Setup,我在InnoSetup脚本的[INI]部分有一个常规条目 e、 g 现在,在一些系统上,如果创建了INI文件,则段落符号(§)将作为预期的ascii进行处理,而在其他系统上,它将转换为UTF-8 事实上,如果我分析这些文件的确切内容 通常我有:§=>“47”(十六进制) 但在某些系统上:§=>“C2 47”(十六进制),这是“§”的UTF-8表示形式 但为什么会有这种差异呢 我认为Inno安装程序使用WinAPI中的常规WritePrivateProfilString。我在Win Api中发现:

我在InnoSetup脚本的[INI]部分有一个常规条目

e、 g

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

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

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

我认为Inno安装程序使用WinAPI中的常规
WritePrivateProfilString
。我在Win Api中发现:

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


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

在另一个线程上解决了它,因为您是对的,它与Inno Setup没有直接关系,请参阅:


非常感谢,InnoSetup rocks:-)

我假设INNO会尊重INI文件上的编码(如果已经存在),并使用正确的写入。。。方法通过查看BOM表。但我不知道Inno的来源。我相信其他人会评论。是的,Inno安装程序使用
WritePrivateProfileString
–但是您引用的注释是关于函数的API,而不是关于INI文件的编码。这与你的问题无关一般来说,我认为Windows API不支持INI文件的UTF-8编码。另见。还有它所链接的问题:。此外,您的引用肯定适用于已编译的可执行文件。这将是一个假设,假设您与该exe一起使用的任何INI文件都将以相同的方式进行编码。走火入魔:)我等着看别人怎么说@MartinPrikryl INI文件确实支持编码,但如下:@AndrewTruckle我更正了我的评论:“我认为Windows API不支持INI文件的UTF-8编码”。当然,INI文件是一个文本文件,您可以使用其他软件将文本文件的编码更改为您喜欢的任何内容。但我相信,使用Windows API(以及Inno安装程序)无法正确读取此类INI文件。我的链接答案已经说过了。
[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: §"