質問: 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コンパイル時にエンコードを指定するという方法もあるようですが、その方法は 他へ影響が大きいため、利用できそうにありません。 情報が足りない等あればお願い致します。 ご回答よろしくお願い致します。
回答: > 多言語環境でも動作する必要があります。 だとすると ・渡す文字列をc++アプリケーションでurlエンコードしてからjavaアプリケーションに引数として渡し、java側でデコードする または、javaのコマンドライン引数として文字列を渡すのはやめて ・c++アプリケーションとjavaアプリケーションの間でプロセス間通信(パイプなど)で文字列を渡す ・渡す文字列をc++アプリケーションからファイルに書き出し、それをjavaアプリケーション側で読み出す などのダサい方法で実装したほうが確実かもしれません。