1

Davidの助けを借りて、Windowsコンソールに特殊文字(0x80 ... 0x9F)を書き込む問題をようやく解決しました。

  1. 出力エンコーディングはUTF-8に設定する必要があります。
  2. コンソールで使用されるフォントは、Consolasのようなものである必要があります。

ここで、ユーロ記号(€)など、0x80-0x9Fの範囲(Windows 1252エンコーディングを使用)で見つかった特殊文字を含むテキストを読み戻すことができるようにしたいと思います。

string text = System.Console.ReadLine ();

null特殊文字の1つを入力するたびに戻ります。InputEncoding私は素朴にをUTF8に設定しようとしました:

System.Console.InputEncoding = System.Text.Encoding.UTF8;

しかし、これは役に立ちません。

4

2 に答える 2

3

これらの特殊文字を読み取るように、コンソール アプリケーションの入力コード ページを設定できます。入力コード ページを設定するための SetConsoleCP という Win32 API があります。次の例では、Windows-1252 コード ページを使用しています。

[DllImport("kernel32.dll")]
private static extern bool SetConsoleCP(uint wCodePageID);

static void Main(string[] args)
{
  SetConsoleCP((uint)1252);
  Console.OutputEncoding = Encoding.UTF8;
  System.Console.Out.WriteLine("œil"); 

  string euro = Console.In.ReadLine();

  Console.Out.WriteLine(euro);
}

編集:

AS LB は、Console.InputEncoding = Encoding.GetEncoding(1252) も使用できることを提案しました。

相互運用機能を使用しない完全な例を次に示します (注: 出力エンコーディングに Windows-1252 コード ページを使用することもできます。

static void Main(string[] args)
{
  Console.InputEncoding  = Encoding.GetEncoding(1252);
  Console.OutputEncoding = Encoding.GetEncoding(1252);
  System.Console.Out.WriteLine("œil"); 

  string euro = Console.In.ReadLine();

  Console.Out.WriteLine(euro);
}

編集終了

お役に立てれば。

于 2011-10-29T15:44:45.067 に答える
-3

ユーロ記号 (€): Unicode 0x20ac も UTF-8 バイト シーケンス 0xE2 0x82 0xAC。0x80-0x9F の範囲ではありません。

char Euro = Convert.ToChar(0x20ac);
Console.WriteLine(Euro);
Console.WriteLine(Convert.ToChar(0x80));

コマンドライン入力これ

>csc sample.cs
>chcp 65001

コマンドラインウィンドウのプロパティ(フォントタブ)でのフォント変更TrueTypeFont(「Consoleas」または「Lucida Console」を選択)

>sample
€
?

(?:四角で囲まれた)。文字コードは、フォント パレット ケース 0x80-0x9F を確認します。Unicode 対応のフォントが割り当てられていません。

于 2011-10-29T15:25:37.843 に答える