「heart」、「note」などの標準のASCII記号(最大127)を正しく表示できます。壁の描画に使用できるもの(U0205など)も表示したいのですが、動作しません。まあ、動作しますが、「?」のように見えます。どうすればそれらを表示できますか?ありがとうございました。
2 に答える
コンソールモードのアプリは、8ビットのコードページエンコーディングに制限されています。多くのマシンのデフォルトはIBM437で、これは古いIBMPCの文字セットと一致するコードページです。OutputEncodingプロパティを割り当てることにより、コードページを変更できます。
Console.OutputEncoding = Encoding.UTF8;
しかし、今では通常、フォントに問題があります。コンソールのデフォルトはターミナルフォントです。これは、IBMPCの文字セットを生成するための適切な場所にグリフが含まれている古いデバイスフォントです。Unicodeコードポイントに一致する適切なグリフを生成できるフォントは多くありません。Consolasはそれについてであり、VistaとWin7で利用できます。
しかし、それはあなたが求めていることではない、と私は思う、あなたは実際に古い箱の描画文字について尋ねていると思う。これは、コンソール設定をいじくり回すことなく機能します。適切なUnicode文字を使用する必要があります。コピーアンドペーストを生き残る必要がある例を次に示します。
class Program {
static void Main(string[] args) {
Console.WriteLine("╒════════╕");
Console.WriteLine("│ Hello │");
Console.WriteLine("│ world │");
Console.WriteLine("╘════════╛");
Console.ReadLine();
}
}
これらの文字を見つけるには、Windowsのcharmap.exeアプレットを使用します。[詳細表示]チェックボックスをクリックし、[検索]テキストボックスに「ボックス」と入力すると、グリッドにボックスの描画文字が表示されます。コンソールに適切に変換される最初の使用可能なものは「\u250c」です。
問題は、プログラムではなくコンソールアプリケーションにあるようです。Windowsの標準コンソール(cmd.exe)は、Unicodeを適切にサポートしていないようです。たとえば、以下の文字列をコピーして、cmd.exeウィンドウに直接貼り付けてみてください。
サッカーÖü
PowerShellにも同じ問題があるようです。
この問題に対する1つの可能な解決策は、アプリケーションが実行された実際のコンソールを使用する代わりに、「出力コンソール」として使用される専用のウィンドウ/フォームを作成することです。