私は非常に単純なコードを持っています:
package org;
import java.nio.charset.Charset;
public class Test
{
public static void main(String[] args)
{
System.out.println(Charset.defaultCharset());
}
}
Windows7 RUS JRE7で実行します。
「デバッグ」または「実行」を使用して Eclipse 4.2 (20120614-1722) から実行すると (Eclipse またはプロジェクトに追加のエンコード設定を設定しませんでした)、次の結果が得られます。
windows-1252
そして、それは私にとって正しいようです。
しかし、これを ANT 1.8.2 でデフォルト設定の JAR にパックすると、次のようになります。
<project name="Test" default="dist" basedir=".">
<description>
Simple build XML
</description>
<!-- set global properties for this build -->
<property name="src" location="src"/>
<property name="build" location="build"/>
<property name="dist" location="dist"/>
<target name="init">
<!-- Create the build directory structure used by compile -->
<delete dir="${build}"/>
<mkdir dir="${build}"/>
</target>
<target name="compile" depends="init" description="compile the source" >
<!-- Compile the java code from ${src} into ${build} -->
<javac srcdir="${src}" destdir="${build}" includeantruntime="false"/>
</target>
<target name="dist" depends="compile" description="generate the distribution" >
<!-- Create the distribution directory -->
<delete dir="${dist}"/>
<mkdir dir="${dist}"/>
<!-- Put everything from ${build} into the test.jar file -->
<jar jarfile="${dist}/test.jar" basedir="${build}">
<manifest>
<attribute name="Main-Class" value="org.Test"/>
</manifest>
</jar>
</target>
</project>
実行すると、次の結果が得られます。
>java -jar test.jar
windows-1251
私はここで同じ結果を得ることを望んでいました。私は何を間違っていますか?デフォルトの文字セットを決定する正しい方法はどれですか?
更新:この質問をする理由は、エンコーディングを手動で指定できるファイルを実際に読み書きしないからです。javax.sound.sampled.Mixer.Info.getName()から返された String が あり、それを異なるシステム文字セットで適切に表示する必要があります。
Update2: その理由は、javax.sound.sampled.Mixer.Info.getName() が CP1251 で「システム文字セット」固有の結果をエンコードするためと思われるため、「システム文字セット」にデコードする必要があります。しかし、それを見つける方法は?