Delphi柏林Unicode问题

问题描述 投票:1回答:1

我有一个非常奇怪的与Unicode字符有关的Delphi编译器问题。

我有一个具有此const定义的单元:

const SLANG_SPANISH_ESP = 'Español';

当我在PC上进行编译时,ñ被转换为等效的ASCII。我使用了十六进制查看器来检查相关文件:

在pas源文件中,ñ在UTF-8中编码为C3 B1

在生成的DCU文件中,ñ以ASCII(?)编码为F1

我们小组中的所有其他Delphi PC均以不同的方式编译DCU,以DUT-8编码为ñC3 B1生成DCU文件。

这只是一个例子,但是许多非ASCII字符的命运相同。

我在过去的几天中一直在努力寻找原因,但没有成功。使用SVN时,我已经消除了项目文件和源代码。我通过从同事的PC手动复制项目文件夹进行了仔细检查。

我已经在Delphi设置中查找了可能会影响此效果的内容,但也没有成功。

很难想象在不同PC上使用相同的源代码会编译成不同的结果。我现在唯一的希望是,社区中的某人能够给我一个提示。

delphi unicode utf-8 delphi-10.1-berlin byte-order-mark
1个回答
0
投票

我终于找到了这个问题的根源。事实证明,尽管IDE告诉了我,相关的pas文件并未保存为UTF-8。实际上,这是Delphi的一个已知问题/怪癖,其中该单元以UTF-8字符保存但没有BOM。

您可以在此问题上参考Marco Cantu的博客:The Delphi Compiler and UTF-8 Encoded Source Code Files With no BOM

之所以没有BOM,是因为它是使用内部工具生成的。此后,该工具也已更新,可以输出BOM。

最后,我发现在给定的计算机上,使用IDE或通过MsBuild.exe从外部构建项目会产生不同的结果。 IDE会正确将单元解释为UTF-8,而MsBuild.exe会将单元解释为Ansi。

© www.soinside.com 2019 - 2024. All rights reserved.