こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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コンパイル時にエンコードを指定するという方法もあるようですが、その方法は
他へ影響が大きいため、利用できそうにありません。

情報が足りない等あればお願い致します。
ご回答よろしくお願い致します。

投稿日時 - 2011-07-08 01:51:30

QNo.6861671

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

> 多言語環境でも動作する必要があります。

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

投稿日時 - 2011-07-10 10:59:54

ANo.2

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

投稿日時 - 2011-07-08 23:15:18

お礼

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

投稿日時 - 2011-07-09 19:37:06

ANo.1

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

投稿日時 - 2011-07-08 13:16:12

お礼

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

投稿日時 - 2011-07-09 19:39:34

あなたにオススメの質問