Delphi DFM文件是否总是按ANSI编码保存?

gev0vcfq  于 2023-01-05  发布在  其他
关注(0)|答案(1)|浏览(191)

我们正在对所有源文件的UTF-8编码进行标准化,以使开发人员更容易使用过多的工具(特别是Windows、Mac和Linux上的IntelliJ IDEA)来处理Git合并冲突,而不会引入不必要的编码更改。
虽然 Delphi 11似乎能够很好地处理UTF-8和ANSI编码的PAS和DFM文件,并且有一个名为“默认文件编码”的配置设置(在Tools〉Options〉Editor下),可以将其默认设置ANSI更改为UTF8,使所有新创建的PAS文件都以UTF-8编码保存,但这似乎并不影响DFM文件。
DFM文件似乎总是以ANSI格式保存。这似乎也适用于最初以UTF-8编码的DFM文件:当我在 Delphi 中编辑它们并重新保存时,它们变成了ANSI。
这是一个特性还是一个bug?如果是一个特性,你能指出一些权威的文档来说明吗?

piv4azn7

piv4azn71#

DFM文件使用自己的专有编码(#后跟Unicode代码点编号)来存储字符串值中的非ASCII字符。
然而,在 Delphi 的更新版本中,如果标识符(类、属性或组件名称)包含非ASCII字符,则文本形式的DFM文件可以使用UTF-8自动存储。
来自用于 Delphi 11 Alexandria 的documentation
组件流(文本DFM文件):

  • 完全向后兼容。
  • 仅当组件类型、特性或名称包含非ASCII-7字符时,才以UTF-8格式进行流处理。
  • 字符串属性值仍以“#”转义格式进行流式传输。
  • 也可以允许UTF-8格式的值(未决问题)。
  • 组件名称、属性和类型名称的UTF-8数据只有在二进制格式中才有可能发生变化。

相关问题