2017-07-13 14 views
1

Windows上で色付きのテキストをコンソールに印刷しようとしていますが、エスケープ文字\u001Bを使用する必要があります。JavaからWindowsコンソールにエスケープ文字を印刷する方法

私のIntelliJ IDEAのコードSystem.out.print("\u001B[92m Hello!"):は緑色のテキスト "Hello!"を表示します。

私はCMDからアプリケーションを実行すると、残念なことにコンソールでは機能しません。 ASCIIとUTF-8エンコーディングを使用しようとしましたが、それは役に立ちません。前述し、以下のスニペット

try (OutputStreamWriter writer = new OutputStreamWriter(
     System.out, 
     StandardCharsets.UTF_8)) 
{ 
    writer.write("\u001B[92m Hello!"); 
} 

版画例えば

この<question mark in rectangle>[92m Hello!

ような何か情報:最後たとえば私はCHCP 65001コマンドを使用してUTF-8へのコンソールコードページを変更し、 -Dfile.encoding=UTF-8フラグを有効にしてJavaアプリケーションを実行すると、Javaとコンソールで同じエンコードが使用されます。結果は同じです。

.batスクリプトから色付きのテキストを印刷できるので面白いです。たとえば、タスクが<ESC>キーボードコンボAltキー + + + で++メモ帳に入力することができるエスケープ文字であるecho <ESC>[92m Hello!によって行うことができます。

さらに興味深いのは、Javaがエスケープ文字<ESC>を外部ファイルに正しく出力していることです。私はこの問題の解決策(できればネイティブ)を知ってうれしいです。

+0

を参照してくださいは、エスケープ構文の種類コンソールをサポートしていますか? – talex

+0

Windows 10を使用していますか?私はそのようなエスケープシーケンスは古いWindows版の 'cmd'では動作しないと思います... – aschipfl

+0

.batスクリプトからエスケープ文字を完全に認識し、手動入力からエスケープコマンド文字を認識します。だから、それはサポートしています! javaとCMDの間に何か奇妙なことが起こる。 –

答えて

0

質問の説明は私には少し混乱していますが、単にCMDの「\」の文字を印刷したい場合、あなたはそれをエスケープする必要があります:

など。 "\ x"を印刷する場合は、 "\\ x"と記述する必要があります。

How do I print escape characters in Java

+0

いいえ、私の大文字ではない文字 ' 'は大文字ではありません。メモ帳+ +では、 "Alt + 0 + 2 + 7"コンボで入力することができます(Altキーを押しながら0,2,7を続けてクリックし、Altボタンを放してください) –

1

ANSI/VT100エスケープシーケンスは、すべての端末では動作しません。を参照してください。 IntelliJはデフォルトで明らかにそれらを理解していますが、通常のWindows CMD.exeウィンドウで動作させるには、enable the support firstが必要です。

How to make win32 console recognize ANSI/VT100 escape sequences?

+0

OPはシーケンスがCMDで動作する – RealSkeptic

+0

@RealSkeptic、CMDはコンソール(conhost.exe)のVTモードを有効にします。外部プログラムを実行すると、CMDはコンソールを起動時のモードに戻しますので、Javaコンソールプログラムがそれを有効にしなければならない、またはCMDは既にVTモードが有効になっている別のコンソールプログラムから起動されなければならない。ループが終了するまでVTモードを復元しません – eryksun

+0

@eryksun CMDは.batスクリプトのエスケープシーケンスで正常に動作します。つまり、_.bat_スクリプトを実行すると内部的に扱われますCMDの手順? –

関連する問題