Rob*_*ech 5 unicode inno-setup ansi
我有一个名为的函数GetServerName。我需要传递文件名(例如“ test.txt”)和所需的节字符串(例如“ server”)
该test.txt文件包含这样的内容
data1 | abcd
data2 | efgh
server| 'serverName1'
data3 | ijkl
Run Code Online (Sandbox Code Playgroud)
我需要提取服务器名称,以便在我的函数中传递类似的内容GetServerName('test.txt', 'server'),并且应该返回serverName1。
我的问题是之前test.txt是ANSI编码的文件。现在它可以是ANSI编码的文件或Unicode编码的文件。下面的函数对于ANSI编码的文件正常工作,但是如果文件以UNICODE编码,则会出现问题。我怀疑有LoadStringsFromFile功能。因为调试时可以看到它返回Unicode字符,而不是人类可读的字符。如何简单地解决我的问题?(或者如何查找文件的编码类型以及如何将UNICODE字符串转换为ANSI进行比较,然后我自己做即可)
data1 | abcd
data2 | efgh
server| 'serverName1'
data3 | ijkl
Run Code Online (Sandbox Code Playgroud)
在Windows中,当我另存为文本文件时。我在图像中附加了4个选项。我找到了,Windows提到Unicode为UTF-16LE编码(有点混乱)

首先,请注意Unicode不是编码。Unicode是一个字符集。编码为UTF-8,UTF-16,UTF-32等。因此,我们不知道您实际使用哪种编码。
在Inno Setup的Unicode版本中,该LoadStringsFromFile功能默认情况下使用当前的Windows Ansi编码。
但是,如果文件具有UTF-8 BOM,它将相应地处理内容。BOM是自动检测UTF-8(和其他UTF- *)编码的常用方法。您可以使用Windows记事本以BOM表以UTF-8编码创建文件。
本机不支持UTF-16或其他编码。
有关读取UTF-16文件的实现,请参见Inno Setup Pascal脚本-读取UTF-16文件。