0

我有一个简单的 Java 项目。我确实使用 Eclipse 4.2 编写代码。我也使用 ant 来构建和启动我的应用程序。我的启动结果是一个文件。我确实读取了一个输入文件并生成了输出文件。
问题是:我得到不同编码的结果。当我通过 Eclipse 启动应用程序时,我会以一种编码方式获得输出文件。当我使用 ant 运行相同的应用程序时,我会得到其他编码的结果输出文件。Eclipse 和 ant 使用相同的 jdk 构建和运行应用程序...我做错了什么...?

我认为这个问题是其他人。请查看我的 build.xml 的一部分:

<target name="compile" depends="init">
    <javac destdir="${bin.dir}" classpathref="project.classpath"
                source="1.7"
                target="1.7"
                debug="yes"
                encoding="UTF-8"
                srcdir="${src.dir}">
    </javac>
    <copy todir="${bin.dir}" >
        <fileset dir="${src.dir}" excludes="**/*.java" />
    </copy> 
</target>

如您所见,指定了编码。源文件实际上是 UTF-8。

这是启动主类的代码:

<target name="prepare_inserts" depends="dist" description="Run preparation of SQL INSERT statements.">
    <java classname="${main.class}" fork="true">
         <classpath>
            <path refid="project.classpath" />
            <pathelement location="${dist.dir}/xBankImportDWHTestData-${DSTAMP}.jar" />
          </classpath>
    </java>
</target>

如果我运行这个目标,我会得到错误编码的结果文件。如果我确实从 Eclipse 运行此文件(右键单击 java 文件 -> 运行为 .. -> Java 类),一切都可以。我确实在 Eclipse 项目属性中将编码设置为 UTF-8 ...我还能尝试什么?

4

1 回答 1

2

我做错了什么...

您做错的是依赖默认编码。这取决于启动应用程序的环境。使用 Ant,您最有可能获得 OS(或 shell)默认编码。对于 Eclipse,默认编码由 Eclipse 首选项和/或启动器配置确定。(在启动器配置的“通用”选项卡中查看优先设置。)

所以修复是以下之一:

  • 确保默认编码相同;例如,通过更改应用程序的 Eclipse 启动配置。

  • 更改您的代码以使用 FileWriter、OutputStreamWriter 或任何将编码名称或 Charset 作为参数的重载。并确保你的代码在它提供的参数上是一致的。

于 2012-08-22T09:44:29.663 回答