1

私は非常に単純なコードを持っています:

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 で「システム文字セット」固有の結果をエンコードするためと思われるため、「システム文字セット」にデコードする必要があります。しかし、それを見つける方法は?

4

1 に答える 1

2

答えは、デフォルトの文字エンコーディングに頼るべきではないということです:

Javaでデフォルトの文字セット/エンコーディングを見つける方法は?

デフォルトの Java 文字エンコーディングを設定しますか?

代わりに、書き込みまたは読み取り時に、目的のエンコーディングを明示的に指定する必要があります。

たとえば、2 番目のコンストラクターを優先する必要があります。

InputStreamReader(InputStream in) 
InputStreamReader(InputStream in, String charsetName) 
于 2013-01-25T16:22:37.600 に答える