2011-07-14 14 views
4

私は現在、コマンドラインインタプリタで再生されるJavaのテキストベースのゲームに取り組んでいます。UnicodeのJava System.out出力

問題は、デフォルトでWindowsシステムでサポートされていないコマンドラインでドイツ語のumlaute(行ü ö ä ß)をエコーし​​たいということです。しかし、私は物事の束でこれを達成するための方法を見つけた:

  • 私は
  • chcp 65001を使用して)65001にコードページを変更し、私は私がPrintStreamを使用Console Lucida
  • にフォントを変更しましたコマンド (Javaプログラム内)に印刷するためのUTF-8エンコーディング。

これを実行すると、コマンドラインでUTF-8文字を出力することができます。しかし、これはすべてのPCのデフォルト設定ではありません。

私は、バッチファイルを作成してゲームを開始することを考えました。これは、UTF-8出力を有効にする基本設定を行います。コードページを変更してUTF-8を使用する場合は、PrintStreamは問題ありませんが、フォントを変更するのは難しいことです。

フォントは、Windows XP SP2以降のすべてのWindowsにインストールする必要がありますので、問題ではありません。また、レジストリエントリを変更してフォントを変更することもできますが、これにはいくつかの特権が必要でオプションではありません。

私は周りを見つけましたが、私は見つけませんでしたfont - コマンド。 console-fontを変更するための回避策はありますか?

+0

私が代わりに質問に答えるの私は私を求めていますことを申し訳なく思って呼び出します。BATファイル。しかし、どのようにコードページを変更しましたか?私は個人的には、Windowsコマンドプロンプトがユニコードをサポートしていないことを確信していました。 – AlexR

+0

私も。私はその投稿に追加しました。 –

+0

この設定を行うにはjscript/vbscriptをチェックすることをお勧めします。これらは、ActiveXとWMI APIを呼び出すことができるほぼ完全に機能するプログラミング言語です。これらのスクリプトは、コマンドcscriptまたはwscriptを使用して実行できます。 – AlexR

答えて

2

私はちょっと実験しましたが、これはスクリプトなしでもJNIなしでも実現できます:Lucidaは、cmd.exeへのリンクを作成し、そのリンクのプロパティを編集することで選択できます。

リンクをヘキサエディタで開き、Lucide Consoleがそこで選択されていることを確認しました。本当に面白いのは、リンク内でcmd.exeへの絶対パスがエンコードされていることです(私のシステムではD:\ Win ...)。そして、私はここにある別のコンピュータにリンクをコピーします魔法のようにも動作します(Windowsはそのコンピュータ上のCドライブにあります)。Windowsはcmd.exeへの絶対パスを修正し、そのコンピュータで開いているコンソールもLucidaに設定されます。

ここで必要なのは、そのコンソール内でプログラムを開き、必要なのはリンクファイルの名前を含むバッチファイルです(ほとんどが隠されている.lnkで終わります)システム)そうように、あなたのプログラムの名前が続く:あなたは、Javaを使用しているので、私はあなたのような何かを書かなければならないだろうと思い

c.lnk t.exe 

c.lnk java sth.jar 

私はあなたがここに見つけることができる最小限の例を作成しました:

http://www.mediafire.com/?1yn40gsed3isjut

それは含まれています:あなたが信頼さtをいけない場合だけ(オープンメッセージボックスをポップアップ表示

  • 最小限t.exe。exeファイルをメモ帳やペイントで開くだけで、MessageBoxは他のAPI関数を呼び出さないことを確認してください)

  • Lucidaを使用するように設定されたc.lnkからcmd.exeへのリンク(絶対パスはWindowsそれ)

  • t.exe c.lnk

+0

素晴らしい仕事もご覧ください。とてもクール! – AlexR

+0

事前に感謝、私はこれが実際にすべてのボックスで動作することを願って、私はここにわずか2つのcompsがあります。 –

+0

何らかの理由で、これは私のためには機能しません。バッチを実行すると、コンテンツだけがエコーされます。私はさまざまなエンコーディングを試みましたが、ここでは動作しません。 –