プロが教えるわが家の防犯対策術!

Java の Sound API を使用した際に文字化けが起こってしまう問題に関しての質問です。
実行環境は以下です。

・OS: Windows 7 (Windows XP でも同様の問題が発生)
・Java のバージョン: JRE 6

javax.sound.sampled.AudioSystem クラスの getMixerInfo メソッドを使用すると、そのシステムで使用可能なミキサーの情報一覧を取得できますが、このとき、取得したミキサーの情報に含まれる非 ASCII 文字が文字化けしてしまうという問題に直面しています。
具体的な例として、以下にソースコードと出力結果を表示します。

文字化けを回避できるような方法をご存知の方はぜひお教えください。
よろしくお願いします。


=== ソースコード ここから =====

import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Mixer;

public class App {
public static void main( String[] args ) {
Mixer.Info[] mixerInfoList = AudioSystem.getMixerInfo();
for( Mixer.Info info : mixerInfoList ) {
System.out.println( info.getName() );
}
}
}

=== ソースコード ここまで =====

上のプログラムを実行すると、以下のように出力されます。
ご覧の通り文字化けしてしまっています。

=== 出力 ここから =====

Java Sound Audio Engine
Microsoft ?T?E???h
?}?C?N (High Definition Aud
?f?W?^?? ?I?[?f?B?I (
Port ?f?W?^?? ?I?[?f?B?I (
Port ?f?W?^?? ?I?[?f?B?I (
Port ?}?C?N (High Definition Aud

=== 出力 ここまで =====

A 回答 (1件)

>・Java のバージョン: JRE 6


環境の言語~文字コードは?
JDKのバージョンは?
このJRE 6は要らないのでは?
javacとjavaが同じバージョンか、確認して。

ちなみに私の出力は正常(on Ubuntu 9.10, javac 1.6.0_18, java version "1.6.0_18"):
I82801BAICH2 [plughw:0,0]
I82801BAICH2 [plughw:0,1]
Java Sound Audio Engine
Port I82801BAICH2 [hw:0]
    • good
    • 0
この回答へのお礼

返信が遅くなってしまい申し訳ありません。 回答ありがとうございます。
JRE6 ではなく JDK6 の間違いでした。 詳しいバージョン番号は、javac, java それぞれ

javac 1.6.0_20
java version "1.6.0_20"

です。

OS でデフォルトで使用している言語は日本語で、文字コードは不明です。
(Windows 7 なので内部的には UTF-16 で、入出力には CP932 を使用していると思うのですが、どのように確認すればよいのかわかりません。 申し訳ありません。)
Java の System のプロパティでは文字コードを設定しているプロパティが 2 つありましたが、それらの値を UTF-32, UTF-16, UTF-8, MS932 などで変化させてみましたが出力は変化しませんでした。
Java の System のプロパティは System.getProperties メソッドで確認しました。 文字コードが設定されていたプロパティは以下の 2 つでした。

・sun.jnu.encoding=MS932
・file.encoding=UTF-8

私の方の環境でも、デバイスの情報に非 Ascii 文字が含まれていない場合は問題なく表示されます。 非 Ascii 文字が含まれている場合に文字化けしてしまうため、Java のシステムが Windows から情報を取得する際に文字コードの非一致が起こって、文字化けしてしまっているのだと思います。

何かご存知でしたらよろしくお願いします。

お礼日時:2010/07/17 01:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!