• 締切済み

java起動時の日本語引数文字化けについて

java初心者です。 C++ソースからCreateProcess関数を用いてjava.exeを起動し、アプリケーションを起動させるアプリケーションを作成しています。 現在、java側で日本語が文字化けしてしまい、期待する動作が得られていません。 具体的には起動するjavaアプリケーションに引数としてパスを渡しており、そのパスに 日本語が含まれていると文字化けにより解釈できないという状況です。 日本語がアプリケーション内部で正しく利用できるようにはどのようにすれば良いでしょうか。 環境は以下の通りです。 ※情報が足りない等ありましたらお願い致します。。 OS:WindowsXP C++の開発環境:VC6 CreateProcess関数起動時の文字コード:UTF8 java開発環境:eclipse3.5 javaの引数はStringで受けるのですが、java内部ではUTF16らしいので、UTF8で記述された 文字列をUTF16として読むため文字化けしているのかなと調べた結果推測しています。 だとすると、java側で引数で受けた文字列をUTF-8からUTF-16に変換すれば良いのかなと 考えています。 ではその場合どのような処理が必要になるのでしょうか。(String#getBytes()を使う?) 後、javaコンパイル時にエンコードを指定するという方法もあるようですが、その方法は 他へ影響が大きいため、利用できそうにありません。 情報が足りない等あればお願い致します。 ご回答よろしくお願い致します。

みんなの回答

  • salsberry
  • ベストアンサー率69% (495/711)
回答No.3

> 多言語環境でも動作する必要があります。 だとすると ・渡す文字列をC++アプリケーションでURLエンコードしてからJavaアプリケーションに引数として渡し、Java側でデコードする または、Javaのコマンドライン引数として文字列を渡すのはやめて ・C++アプリケーションとJavaアプリケーションの間でプロセス間通信(パイプなど)で文字列を渡す ・渡す文字列をC++アプリケーションからファイルに書き出し、それをJavaアプリケーション側で読み出す などのダサい方法で実装したほうが確実かもしれません。

  • salsberry
  • ベストアンサー率69% (495/711)
回答No.2

Windows用のJavaは、日本語環境ではMS932をデフォルトエンコーディングとして動作します。決め打ちになってしまいますがJavaプロセスを起動するときに文字列をUTF8ではなくてMS932で渡すことはできませんか?

othermine
質問者

お礼

ご回答ありがとうございます。 言葉足らずで申し訳なかったのですが 多言語環境でも動作する必要があります。 ですので動作環境を日本語環境に限定してしまう方法では対応できません。。

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.1

検証していないので思いつきの回答になっちゃうけど native2asciiで変換して渡してあげてはどーかな?

othermine
質問者

お礼

ご回答ありがとうございます。 native2asciiですか、まともに利用したことが無いので調べてみます。

関連するQ&A

専門家に質問してみよう