【问题标题】:What would make Ant execute 'javac' in Eclipse with UTF-8 instead of my system default Cp1252?什么会使 Ant 在 Eclipse 中使用 UTF-8 而不是我的系统默认 Cp1252 执行“javac”?
【发布时间】:2009-08-17 23:24:00
【问题描述】:

上周我一直在试图弄清楚为什么我新采用的应用程序正在做的一些流解码给我带来了一些主要的编码问题。最后我发现问题在于使用 Ant 构建并部署到服务器的 JAR/WAR 是使用 javac 任务使用编码 UTF-8 而不是系统默认的 CP1252 编译的。

这似乎主要是由于这些特殊字符有许多硬编码的字符串/字符。

这很容易通过以下任一步骤解决:

  • 将 Eclipse 项目的编码更改为 UTF-8 以匹配服务器上的字节码
  • 将 javac 任务的编码设置为 CP1252 以构建 WAR 文件以匹配客户端字节码
  • 奇怪的是,只在命令提示符下运行 Ant 没有指定任何编码。

那么为什么 Eclipse 中的 Ant 会改为 UTF-8?这是可配置的吗?在哪里配置?

系统

  • Windows XP
  • Eclipse 3.5
  • 蚂蚁 1.7.1
  • Java 1.6.0_11

【问题讨论】:

标签: java eclipse encoding ant


【解决方案1】:

Ant,从 Eclipse 运行,使用所有相同的版本(除了我有 Java 1.6.0_15)将我的 Java 源文件视为Windows-1252。我的工作区和项目正在使用默认设置。

UTF-8 匹配服务器上的字节码

我不确定你的意思是什么——你的意思是源文件的编码,当然。字节码是一组结构化的指令;类文件中内置的字符串文字是always UTF-8


我会使用Unicode escape sequences 使我的文件与编码无关。您可以使用native2asciijava.nio.charset API 等工具来帮助解决此问题。

【讨论】:

  • 只需将命令
    我的意思是,如果我将项目编码切换为 utf8,它将与在服务器上运行的 utf8 编译代码一致,因为 Eclipse 中的 Ant 以某种方式使用 utf8 for javac跨度>
  • 我宁愿一切都设置为更跨平台友好的编码,例如 utf-8,也许当我更好地参与项目时,这将是我完成的任务
  • @Vanger 您需要确保设置了输入编码,以便工具知道它的编码来源;结果文件不是 UTF-8 明确的(但可以被视为有效的 Cp1252、UTF-8、ISO-8859-15、ISO-8859-1 等)
  • @codeLes - 由于源文件不携带任何编码元数据,因此您必须在使用源代码的每个工具和脚本中管理该信息。我更喜欢使用 \uXXXX 转义序列并尽量减少它们的使用。无论哪种方式,您都必须遵守纪律,否则您最终会遇到编码错误。
【解决方案2】:

在命令行使用Ant时,会自动使用系统默认编码,在你的系统上好像是windows-1252。

在 Eclipse 中使用 Ant 时,它会读取源文件/文件夹的本地编码属性以确定必须使用哪一个。此属性位于 Properties 对话框的 Resource 页面中,右键单击源文件夹时可用。

如果未指定任何内容,则使用工作区范围的默认编码。它可以通过 Window>Preferences 对话框进行配置。

希望这会有所帮助。

【讨论】:

    【解决方案3】:

    我的电脑上发生了类似的事情。是Windows,Eclipse中的文本文件编码配置设置为默认(Cp1252)。

    命令行中的 Ant 在编译带有“奇怪”字符(例如,íñü >)。但是在 Eclipse 中执行相同的 Ant 任务。

    我不得不在 Eclipse 中使用 JRE 选项卡中的此参数配置 Ant 任务:

    -Dfile.encoding=Cp1252
    

    Ant 任务的 javac 部分现在可以正常工作了。

    【讨论】:

      猜你喜欢
      相关资源
      最近更新 更多
      热门标签