• 締切済み
  • すぐに回答を!

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コンパイル時にエンコードを指定するという方法もあるようですが、その方法は 他へ影響が大きいため、利用できそうにありません。 情報が足りない等あればお願い致します。 ご回答よろしくお願い致します。

共感・応援の気持ちを伝えよう!

  • 回答数3
  • 閲覧数1688
  • ありがとう数3

みんなの回答

  • 回答No.3

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

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • CreateProcessのコマンド・ライン文字列

    ■開発環境:VisualStudio2005 VC++ CreateProcessの第2引数についての質問なのですが、 第二引数は実行するコマンドライン文字列となりますが、この引数のサイズがある一定のサイズを超えるとCreateProcessの実行でエラーになります。 その場合のGetLastError()の番号は87=ERROR_INVALID_PARAMETERです。 どうも、CreateProcessの第2引数のサイズに上限があるように思います。 どなたこのあたりの情報を持っておられる方いますでしょうか? 以上、ご教授よろしくお願いします。

  • JavaプログラムからEXE起動

    JavaプログラムからEXEファイルを起動することはできるのでしょうか。 ノートパッド(notepad.exe)を起動することはできたのですが、 たとえば他のエディタ(たとえば秀丸とか)ではエラーが起こってしまいます。 java.io.IOException: CreateProcess: Hidemaru.exe error=2 どうすれば起動することが可能なのでしょうか。

    • ベストアンサー
    • Java
  • EXEへの引数渡しについて

    VC++でプログラミングしています。 MFCを使ってダイアログベースのEXEを造っています。 このEXEは別のプロセスから CreateProcess関数で起動され、 引数も渡されます。 で、質問です。 ダイアログのEXEでは、渡された引数を解析するために、何処で、 どのようにしたらよいのでしょうか? C言語での (argc, argv) のような仕組みがあるのでしょうか? 識者の方、ご教授願います。

  • 回答No.2

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

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

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

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

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

関連するQ&A

  • JAVAでMySQLに接続すると日本語が化ける

    似たような質問がいくつかありますが、どれも解決には至らなかったため質問させていただきます。 以下のような環境でMySQLにレコードを追加するプログラムを作成しましたが、どうしても日本語が文字化けします。 解決方法をご存知の方、心当たりのある方は、何卒ご教授お願いします。 MySQLの使用文字コードの設定は下記の通りです character_set_client: utf8 character_set_connection: utf8 character_set_database: utf8 character_set_filesystem: binary character_set_results: utf8 character_set_server: latin1 character_set_system: utf8 データベースおよびテーブルは下記のように作成しました create database test default character set utf8; create table test ( text text ); Javaのソースコードは以下です import java.sql.*; public class MySQL {  public static void main(String[] args) {  try {   Class.forName("com.mysql.jdbc.Driver");   Connection db = DriverManager.getConnection("jdbc:mysql://localhost/?useUnicode=true&characterEncoding=UTF-8", "root", "");   Statement sql = db.createStatement();   sql.execute("use test;");   sql.execute("insert into test values('ほげほげ');");   ResultSet results = sql.executeQuery("select * from test");   db.close();  } catch (Exception e) {   System.out.println("can't connect the database (" + e + ")");  } } } これを以下のように実行します $ javac -encoding UTF-8 MySQL.java $ java -Dfile.encoding=UTF-8 MySQL これでもかというぐらいUTF-8で統一してますが、 それでも、???? のように文字化けします。 試せることは全てやってみましたがどうにも解決できません。 ご助力よろしくお願いいたします。

  • CreateProcessで起動したアプリの監視

    はじめまして、E46-M3と申します。 さっそくですが、CreateProcessを使って他の プログラムを起動した際、その起動したプログラムを 監視することは出来ないのでしょうか? 具体的に言いますと、 CreateProcessで起動させたプログラムが 終了したか、していないか または、異常終了したか などの判断をしたいのですが・・・ どなたかご存知な方がいましたら 是非教えて下さい。よろしくお願いします。

  • Javaで日本語の出力が文字化けする

    Javaプログラミング初心者です。 開発環境でNetBeans IDE 7.2.1を使用してプログラミングの勉強をしているのですが、 日本語の入力・表示を行った場合、必ず文字化けしてしまいます。 サンプルコードは下記の通りです。 ================================ public class Main{ public static void main (String[]args){ System.out.println ("名前を入力してください"); String name = new java.util.Scanner ( System.in).nextLine(); System.out.println ("名前は" + name + "です"); } } ================================ 上記コードで、変数nameに日本語を入力すると、文字化けしてしまいます。 コマンドプロンプトや、web上のJava開発環境(どこJava http://dokojava.jp/pc/index.html)では、 同じソースで正常に日本語表示されるので、NetBeanの設定では無いかと思っております。 自力では解決方法が見つからなかったので、ぜひアドバイスをいただければと思います。 よろしくお願いします

    • ベストアンサー
    • Java
  • CreateProcessでコンソールアプリケーションを起動するには

    コンソールアプリケーションの中で、CreateProcess関数を用いて、自分自身のアプリケーションを起動したところ、次の結果になりました。 ・CreateProcess関数自体は成功する ・タスクマネージャで確認すると自分自身が2つ起動されている ただし、コンソールアプリケーションのウィンドウは1つしか開かず、そのウィンドウを2つのアプリケーションで共有しているかのように動作します(printfによるメッセージが2重に表示されるなど)。 使用言語はVC++ .NET 2008で、デバッガによる動作をさせています。 詳しい方、宜しくお願いします。

  • アプリケーション起動について

    ひろと申します。 クライアントからサーバの共有フォルダにある、他のアプリケーションを オプション付きで起動させるプログラムをVC++で作成したのですが、 クライアントがNTだとうまくいきません。 たとえば、サーバ上にあるapp.exeを「app.exe /i」のような感じで 起動すると、クライアントがwin98の場合はアプリケーションが 表示されるのですが、NTから起動させようとすると、 アプリケーションは表示されません。 また、オプションを外すとアプリケーションは NTでも表示されます。 APIは、WinExec,ShellExecuteEx,CreateProcessで試したのですが 同じ結果でした。 CreateProcess は以下のように設定してます。 ------------------------------------------------------------------ STARTUPINFO si; PROCESS_INFORMATION pi; ZeroMemory(&si, sizeof(STARTUPINFO)); ZeroMemory(&pi, sizeof(PROCESS_INFORMATION)); si.cb = sizeof(STARTUPINFO); si.dwFlags = STARTF_USESHOWWINDOW; si.wShowWindow = SW_SHOWNORMAL; CreateProcess(NULL, "serverpath\\app.exe /i", NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi); プロセスの起動は成功していうようです。 クライアントがNTの場合、他に必要な設定があるのでしょうか? よろしくお願いします。

  • Javaでの文字化けの検出

    Javaでの文字化けの検出 byte配列をStringのコンストラクタの引数に指定してStringに変換した場合に 指定した文字コードで変換できなかった時、System.out.printlnでは"?"で表示されますが、 そのような状態を検出したいのですが、方法がわかりません。教えてください。 "?".equals(対象文字)をしてみてもイコールにならないようです... 文字コードはMS932 UTF-8 Unicodeでの使用になります。OSは日本語WindowsXPです。

  • CreateProcess

    さっそくですが… <MS-DOS上で動作するEXE> test.exeを実行する    ↓ データ(文字列)を入力し,Enterを押すと 実行結果が表示されます。 ------------------------------------------- このようなtest.exeがある時, 1)test.txtにデータ(文字列)を入れておきます。 2)実行後,結果を入れるr.txtを作っておきます。 そこで,DOS上で↓このように動かしました。 C:\ ~ \ ~ >test.exe <test.txt >r.txt 以上のことを(環境:BorlandC++Builder6,Windows2000) API関数のCreateProcessを使って動かすことは 可能なのでしょうか??というのは, 現在,CreateProcessでtest.exeを 呼び出すことはできたのですが, どうしても" <test.txt >r.txt "という部分を 入れると引数が渡らないのです。 CreateProcessのpszApplicationNameやpszCommandLine 引数あたりでいろいろ試したのですが,できません。 もしCreateProcessで可能ならば どのようにすればよいのでしょうか?? あまり知識がなく,説明不足かもしれませんが どなたか分かる方がいらっしゃいましたら, 教えて下さい。よろしくお願いします。

  • プロセス間通信

    こんにちは。 あるアプリケーションから、別のアプリケーションを起動し、そのアプリが起動したかどうか(起動完了の確認)をとりたいのですが・・・。 CreateProcessで可能なのですか?? また可能であっても不可能であっても、何か別の方法をご存知ないでしょうか?? よろしくお願いします。

  • createprocessで起動させる別.exeをモーダルで起動したい

    createprocessで起動させる別.exeをモーダルで起動したい お世話になります。 VC++6.0 MFCで開発しております。 現在A.exeのあるボタンを押すとcreateprocessでB.exeを起動させるようにしております。 B.exeを起動後、A.exeの画面表示をクリックするとA.exeがアクティブになるのです。 それを、B.exeが終了しないとA.exeがアクティブにならないように変更したいのですがどのようにすればよいでしょうか? 現状は PROCESS_INFORMATION pi; STARTUPINFO si; si.cb=sizeof(si); CreateProcess(実行EXEパス,コマンドライン,NULL,NULL,TRUE,NORMAL_PRIORITY_CLASS,NULL,NULL,&si,&pi); で起動しております。 また、実現不可能というお答えでもいいので教えていただければと思います。 お手数ですが何卒よろしくお願いします。

  • 日本語の文字化け

    完全にど忘れしたんですが、Windows XPなどの環境でJAVAを使って動作するアプリケーションの日本語の部分が□でしか表示されません。 どこで設定したら正常に日本語で表示されるのでしょう。 JAVAは最新版を入れてあります。

    • ベストアンサー
    • Java