【问题标题】:Delphi 2007 compilation with codepage parameter and teamcityDelphi 2007 使用代码页参数和 teamcity 编译
【发布时间】:2016-12-15 12:20:16
【问题描述】:

我正在尝试编译在 Delphi 2007 中使用参数 --codepage:1252 编写的项目。在一台装有 Windows 10 的机器上,一切正常,西班牙语字符串显示正确。当我在使用 Windows 8 参数 --codepage:1252 的计算机上执行相同操作时,没有任何变化。 我需要这个,因为在它不工作的计算机上我有 teamcity 代理。 有没有人有类似的问题?或者,可以在非 unicode 应用程序上正确显示西班牙字符,而无需在需要系统重启的 windows 属性中更改它,这对 teamcity 服务器来说是个问题。

编辑:

在两台计算机上,我都为非 unicode 应用程序设置了波兰语,并且:

  1. Windows 10 - 用西班牙语字符编译,将 exe 文件复制到西班牙语 PC 上,没有西班牙语字符。
  2. Windows 10 - 使用西班牙语字符和 dproj "1252" 中设置的 --codepage:1252 参数进行编译,将 exe 文件复制到西班牙语 PC 并且西班牙语字符显示正确。
  3. Windows 10 - 使用 dcc32.exe 在命令行中使用西班牙字符和 --codepage:1252 参数编译,将 exe 文件复制到西班牙 PC 和西班牙字符,没有西班牙字符。
  4. Windows 8 - 用西班牙语字符编译,将 exe 文件复制到西班牙语 PC 上,没有西班牙语字符。
  5. Windows 8 - 使用西班牙语字符和 --codepage:1252 参数编译,将 exe 文件复制到西班牙语 PC 并且没有西班牙语字符。

Delphi 编译和使用 dcc32.exe 有什么区别,应该是一样的输出,因为 Delphi 使用 dcc32 的方式一样,我可以在输出中看到。

更新:

经过更多测试,我得出结论: 从使用“--codepage:1252”编译的 Delphi IDE 中,所有文件都具有 ANSI 格式,它可以工作。当我更改为 UTF-8 时将无法正常工作。 从命令行在任何情况下和组合都不起作用。

【问题讨论】:

    标签: windows delphi teamcity


    【解决方案1】:

    Delphi 2007 是 Delphi 的最后一个版本,它仍然使用基于 Ansi 的 RTL/VCL。本机 GUI 组件使用操作系统的默认 Ansi 代码页。因此,如果您的 GUI 无法显示西班牙语数据,那么您的 源代码 是否以 Latin1/Spanish 编码(这是 --codepage:1252 参数告诉编译器的内容)并不重要在非西班牙机器上正确。

    正如 dummzeuch 所提到的,您的源代码应该保存为 UTF-8 而不是 Latin1/Spanish。但是,如果您想在运行时从基于 Ansi 的可执行文件中显示 Unicode 数据,则必须将数据转换为 Unicode 并使用第 3 方 Unicode GUI 组件,例如TNT Unicode controls。另见Handling a Unicode String in Delphi Versions <= 2007

    否则,硬着头皮升级到 Delphi 2009 或更高版本,它们使用基于 Unicode 的原生 RTL/VCL。 Delphi 自 2008 年以来一直是一个完全 Unicode 的产品,是时候抛弃 ANSI。

    【讨论】:

    • 但是当我从 Delphi 进行编译并在 dproj 文件中有 1252 参数时它可以工作。我在波兰语 PC 上编译西班牙语版本。当我在命令行中使用参数 --codepage:1252 通过 dcc32.exe 执行相同操作时,没有西班牙语字符。
    • DCC_CodePage--codepage 仅适用于源代码本身的编码。它们对已编译应用程序的运行时行为没有影响。您在源代码中静态定义的任何数据都将在运行时使用操作系统代码页解释,因为您使用的 Delphi 版本仍然基于AnsiString 和基于 ANSI 的 API。如果您的应用程序在使用不同语言的多台机器上运行,您将不得不在运行时从一个代码页到另一个代码页执行数据转换,或者完全摆脱 ANSI 并改用 Unicode。
    【解决方案2】:

    您可以在正常工作的计算机上将文件格式更改为 UTF-8 并保存(我不确定是否可以为项目中的所有文件自动执行此操作。然后它应该可以工作在任何计算机上,无论其代码页如何。

    要更改文件格式,请使用编辑器窗口的上下文菜单。

    【讨论】:

    • 当我的所有文件都具有 ANSI 格式时,当我更改为 UTF-8 时,西班牙语字符是正确的,我丢失了它。
    • 那我没办法了,抱歉。
    • 将源文件编码设置为 UTF-8,然后在运行时将字符串文字传递给 AnsiString 变量/属性时使用 UTF8Decode()。这将执行从 UTF-8 到操作系统当前使用的任何 ANSI 代码页的转换。
    猜你喜欢
    • 2015-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多