0

私は単純なJavaプロジェクトを持っています。私はEclipse 4.2を使ってコードを書いています。また、アプリケーションのビルドと起動に ant を使用しています。私の起動の結果はファイルです。入力ファイルを読み取り、出力ファイルを生成します。
問題は次のとおりです。異なるエンコーディングで結果が得られます。Eclipse からアプリを起動すると、出力ファイルが 1 つのエンコーディングで取得されます。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 (またはシェル) のデフォルトのエンコーディングを取得する可能性が高くなります。Eclipse では、デフォルトのエンコーディングは Eclipse の設定やランチャーの設定によって決まります。(優先される設定については、ランチャー構成の「共通」タブを参照してください。)

したがって、修正は次のいずれかです。

  • デフォルトのエンコーディングが同じであることを確認してください。たとえば、アプリケーションの Eclipse 起動構成を変更します。

  • FileWriter、OutputStreamWriter、またはエンコーディング名または Charset をパラメーターとして受け取るもののオーバーロードを使用するようにコードを変更します。また、コードが提供するパラメーターに一貫性があることを確認してください。

于 2012-08-22T09:44:29.663 に答える