このサイトでは、約30分読み込まれています。Console.ReadKey()メソッドとConsoleKeyInfo変数を使用して、拡張ASCII文字を正しいプレゼンテーションに変換します。
次のことを仮定し、C#のコンソールアプリケーションで:
今ConsoleKeyInfo cki;
cki = Console.ReadKey(true);
Console.WriteLine(cki.KeyChar.ToString()); //Or Console.WriteLine(cki.KeyChar) as well
Console.ReadKey(true);
、のは、コンソールエントリに¿
を入れ、Console.ReadKey(true)
経由cki
にそれをasignてみましょう。表示されるのは¿
シンボルではなく、¨
シンボルが代わりに表示されます。そして他の多くのキャラクターでも同じことが起こります。例:ñ
は¤
、¡
は-
、´
はï
を示します。
それでは、同じコードsnippletを取ると行動のようなよりConsole.ReadLine()
のためのいくつかのものを追加してみましょう。
string data = string.Empty;
ConsoleKeyInfo cki;
for (int i = 0; i < 10; i++)
{
cki = Console.ReadKey(true);
data += cki.KeyChar;
}
Console.WriteLine(data);
Console.ReadKey(true);
正しい方法でこれを処理する方法の質問に、あるべき右の文字を印刷終了¨
、¤
、-
、ï
などのようなものではなく、data
に保存されていますか?
ConsoleKeyInfo
とConsole.ReadKey()
で動作するソリューションが必要です。他の変数タイプや読み取りメソッドは使用しないでください。
EDIT:
ReadKey()メソッドは、そのコンソールの名前空間から来て、Kernel32.dllのそれdefinetively悪いハンドル拡張ASCIIとUnicodeに依存するので、それはもはや選択肢ではないだけのための有効な変換を見つけるにそれは何を返します。
ReadKey()の不正な動作を処理する有効な唯一の方法は、cki = Console.ReadKey(true)
で書かれたcki.Keyプロパティを使用してスイッチを適用し、次にどのキーが押されたかの依存性について正しい値を返すことです。
は、例えば、ハンドルにÑ
キーを押し:
string data = string.Empty;
ConsoleKeyInfo cki;
cki = Console.ReadKey(true);
switch (cki.Key)
{
case ConsoleKey.Oem3:
if (cki.Modifiers.ToString().Contains("Shift")) //Could added handlers for Alt and Control, but not putted in here to keep the code small and simple
data += "Ñ";
else
data += "ñ";
break;
}
Console.WriteLine(data);
Console.ReadKey(true);
だから、今の質問は、他の機能は、それが押された1つのキーだけで実行だ完了し、より広いフォーカスを...持っている、と押されているものを返します( ReadKey()の代替)?私はそのような代用品はないと思うが、確認された答えが役に立つだろう。
Mmm ...よく、これから1つの質問が私の頭に浮かんでいます...なぜConsole.ReadLine()メソッドがそれを区別するのですか?それはñ、¿、 'のような正しい文字を取得し、正しい方法で文字列や文字に変換します。マイクロソフトがメソッドのソースコードをリリースすれば、より簡単になります。D – mishamosher
さて、彼らはそうしました。 http://referencesource.microsoft.com/netframework.aspx –
ユニコードをサポートしていないコンソールについては、私は確信していません... 2つの速い結果は反対です:http://stackoverflow.com/questions/1259084/what- encoding-code-page-is-cmd-exe-usingとhttp://www.perlmonks.org/?node_id=329433 – mishamosher