Javaコンソール出力でVT-100等のエスケープシーケンス文字はできるのか?

このQ&Aのポイント
  • JavaのSystem.out.print系ではVT-100等のエスケープシーケンス文字が使えないため、CUI諸設定画面の実現が難しい状況です。
  • お客様の要望でLinuxサーバーの諸設定画面をVT-100端末で操作したいとのことですが、javaでは不可能です。
  • GUIやブラウザでの設定も提案しましたが、サーバーの負荷を抑えるためにjavaでの実現を希望されています。
回答を見る
  • ベストアンサー

javaコンソール出力でVT-100等のエスケープシーケンス文字はでき

javaコンソール出力でVT-100等のエスケープシーケンス文字はできないのでしょうか? 例えば、 System.out.print("\1b[1C"); でカーソルを次にとか、 System.out.print("\1b[5;31m"); で出力文字を赤色で点滅させるとか。 C言語のprintfでは出来るのですが、javaのSystem.out.print系ではできませんでした。 当方、現在CUIの諸設定画面を作っており、困っております。Linuxサーバーにある諸設定画面を LANで繋がれたクライアント(VT-100端末)で行うというお客様からのご要望で、なんとか したいと思っております。 GUI、ブラウザで設定はどうですか?と提案したのですが、なるべくサーバーの負荷を抑えたい ので、不要なサービス等を入れたくないとの事です。 (ちなみにDBサーバーの諸設定です。処理が集中するとHDが回りっぱなしで負荷がすごい) ちなみにlinuxのランレベルも当然3(CUI)です。 できればjavaで実現したいと考えたのですが、やっぱりC言語で書かないとダメかもです。 ご回答、宜しくお願い致します。

  • Java
  • 回答数4
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • Lieserl
  • ベストアンサー率81% (31/38)
回答No.4

Windowsのコマンドプロンプトは、 デフォルトではANSI標準エスケープシーケンスに対応していないみたいですね。 <SystemRoot>\system32\config.ntファイルを編集して、 device=%SystemRoot%?system32?ANSI.SYS とANSI.SYSを読み込ませて、 CMD.EXEではなく、command.comで実行すればできるらしい? http://support.microsoft.com/kb/101875/ja http://support.microsoft.com/kb/100394/ja 下手な機械翻訳より、原文の方がましかも http://support.microsoft.com/kb/101875/en-us/ http://support.microsoft.com/kb/100394/en-us/

mintia007
質問者

お礼

ご回答ありがとう御座います。 そうだったんですか。linuxでは動作しているので特に問題はないのですが、 これでスッキリしました。

その他の回答 (3)

  • Lieserl
  • ベストアンサー率81% (31/38)
回答No.3

Debian-lennyのGNOME-terminalではちゃんと赤くなるんだけどなぁ。 writeでだしてますよね? printだと実行環境の文字コードに変換しようとするから、 コード値変わっちゃうかもしれません。

mintia007
質問者

補足

あ、DebianでもRedHat、CentOS、Fedora、ubunts、KNOPPIX、Vineでもコンソールで 出来ました^^。 でも・・・ MS-DOSコマンドプロンプトで出ません(このMSって感じです><) 別に直接は関係ないんですが、気になったもので・・・。 ご指摘ありがとうございました。

  • ontojava
  • ベストアンサー率61% (8/13)
回答No.2

こんにちは、 www.javaworld.com/javaworld/javaqa/2002-12/02-qa-1220-console.html このサイトによりますと次のように書けばよいのかもしれません System.out.print((char)27 + "[1C"); System.out.print((char)27 + "[5;31m"); System.out.print((char)27 + "[2J");

mintia007
質問者

補足

VT-100端末からは上手くいきました。linuxのコンソールからも上手くいってます。 一応、これでなんとかできそうなのですが、Windowsのコマンドプロンプトではダメでした。 Windows上のコマンドプロンプトでもできそうな感じなのですが。(printfでは上手くいってます) やっぱりMS-DOS系はある意味特殊なので、ダメなのでしょうか?

  • Lieserl
  • ベストアンサー率81% (31/38)
回答No.1

Javaには\1bなんていうエスケープ文字は無いので byte[] esc = {0x1b}; System.out.write(esc); System.out.print("[1C"); ってやってみたらどうでしょう?

mintia007
質問者

補足

ご回答ありがとうございます。 やってみました。出来ませんでした><。 System#out#print系メソッドとC言語のprintf関数の仕組みが違うんですね。 JVMに起因するかなって思ってます。

関連するQ&A

  • Eclipseコンソールでのエスケープシーケンス

    EclipseでJavaのプログラムを開発しておりますが、Eclipseのコンソールでエスケープシーケンスを利用した時の振る舞いがSDKのJavaコマンドで直接動作させた時と違うのは何故でしょうか? 例えば以下の"\r"の動作はJavaコマンドの方ですと現在の行に上書きされる形で表示されます。 for( int i = 0; i < 10; ++i ) { System.out.print( "\r" + i ); Thread.sleep( 100 ); } 上記のコードをEclipseのコンソールを利用すると Eclipseのコンソールでは改行されて表示されてしまいます。 Eclipseでの開発が行い易いため、Eclipseのコンソールの動作をきちんと本家に合わせる設定方法等ご存知でしたら教えて下さい。

    • ベストアンサー
    • Java
  • SUNOSのエスケープシーケンス(終端文字¥0)について・・。

    こんにちわ, 今SUNOSでC言語を学んでいるのですが, 終端文字は\0だとおもっていたのですが,うまくいきません。具体的には次のとおりです。 char command[1000]; strcpy(command, "cat "); strcat(command, _i_filename); strcat(command, " |sed -e 's/ /\\x0/g' "); /* sのあとはスペース1つ */ system(command); Linuxではスペースの所に'\0'文字が入るのですが,SUNOSではそれをx0と認識してしまうようです。 なにかSEDのバージョンや会社に違いがあるからなのでしょうか。 よろしくお願いします。

  • 文字をabcd...と出力させることってできますか?

    javaをやってる大学生です。 int i; for(i=0;i<10;i++){ System.out.print(i); } とやったら023456789とでるようなかんじで、 abcdefghij...とアルファベット順に出力させるにはどうしたらいいでしょうか?よろしくおねがいします。

    • ベストアンサー
    • Java
  • Java(クライアント)とC言語(サーバ)間のソケット通信 文字列送受信の不具合

    サーバ側がC言語(Linux)、クライアント側がJavaのソケット通信プログラムを書いているのですが、いきなりつまづいてしまったため質問失礼します。 ソースとしては以下の2つのソースをテストとして利用させて頂きました。 ローカルネットワーク内の2台にそれぞれを設置し、それにあわせてIPとポートは変更してあります。 http://www.aihara.co.jp/~junt/program/socket/inet_server.c http://www.hellohiro.com/src/HelloWorldSocketClient.java クライアントのJavaプログラムから"Hello World"をサーバのCプログラムに送ると"Hello World"とは標準されるものの、出力された後ろに文字化けしたような文字が少し出てしまいました。加えて、直後にもう一度試してみようとサーバプログラムを立ち上げるとbindでエラーを吐いてしまいました。 recvの結果(rc)をprintfで確認してみたところ、13となり2文字多く送られていることを確認しました。 そこで、Javaのprintlnの自動改行周りが原因かと思いprintfに変えてた試してみました。 しかし、recvの結果は11となったものの文字化けと直後のbindエラーはなおりませんでした。(文字化けの種類が変わりましたが) この問題の原因と考えられることと解決案をアドバイス願えませんでしょうか。よろしくお願いします。 以下、開発環境です。 ■C言語 OS:Fedora 12 エディタ:一応VisualC++2008(Linux用に書いているので実質ただのテキストエディタ) コンパイラ:標準gcc ■Java OS:Windows XP SP3 エディタ・コンパイラ:eclipse ※実装先の都合上、winsockによるサーバに変えるや言語の変更はできません。

    • ベストアンサー
    • Java
  • Java 出力 桁数調整

    Java初心者です。 JAVAのSytem.out.printの出力の際、 double型の数字の桁数(小数点以下何桁まで表示するか)を調整したいのですが、どのようにやればいいのかわかりません。 教えてください。 あまり詳しくないのでライブラリ等から探す探し方ではなく、 具体的なやりかたを教えてください。 <for emaxple> class warizan{ public static void main(String[] args){ double i=0.0; i = 1/3; System.out.println(i); } } をコンパイルして実行すると出力が 0.33333333333333333333333... となると思うんですが、 0.33 など、小数点以下二桁で出力する方法。 また、よければ大きい数字の桁数調整のやり方も 教えていただけるとうれしいです。 123456789 → 123000000

    • ベストアンサー
    • Java
  • Javaでのcoreファイル出力について

    Linux環境でJavaの常駐プログラムを動作させているのですが、C/C++でいうような、setrlimit()のような、アプリケーション側からシステムリソースを操作するようなことは、Javaでできるのでしょうか。 もう一点、そもそもJavaで、環境に依存するcoreファイルでデバッグするべきなのでしょうか。 Javaでcoreファイルに頼るべきではないなど、ポリシーについてもお詳しい方がいらっしゃいましたら、アドバイスお願いいたします。

    • ベストアンサー
    • Java
  • java テキストをその場で表示して書き換え

    日曜プログラマーです。 javaをCUIで利用してテキスト処理や計算に利用しています。 System.out.print()ではテキストを表示できますが、何回処理したかをこれで書き出すと右にずら~と連続して表示されてしまいます。printlnだと開業してだーっと文字が流れていってしまいます。 一つ前の書いた回数の部分だけを書き換える感じで同じ位置に「○回処理中」と出力するのはどうしたらよいでしょうか?

  • 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
  • Javaの文字コード変換方法

    文字コードの変換で困っています。 例えば、標準入力で「あいう」と入力して、その文字列を UTF-8に変換して出力したいのですが、うまくいきません。 サイトにはbyteに変換してから入れると書いていましたが、 よくわかりませんでした。 宜しくお願いします。 以下、今できているソースです。 (ソースコード) import java.io.*; public class ChangeCord { public static void main( String[] args ) { try { System.out.println("何か日本語を入力してください。"); BufferedReader br = new BufferedReader( new InputStreamReader(System.in, "UTF-8")); String str = br.readLine(); System.out.println("文字コードUTF-8に変換した結果"); System.out.println(str); }catch (Exception e) { System.out.println("エラー"); } } } (出力結果) 何か日本語を入力してください。 あいう 文字コードUTF-8に変換した結果 ?????? 以上です。

    • ベストアンサー
    • Java
  • 文字列の出力

    C言語を使用しています。C初心者で分からないことがたくさんあって困っています。 文字列で"AAAABBBBCCCCDDDD"というのを出力する時に AAAA BBBB CCCC DDDDのようにスペースで区切って出力するにはどのようにしたらよいのでしょうか?

専門家に質問してみよう