2017-02-21 30 views
2

Я пытаюсь создать крепость, используя слэши и тире, и мне нужно использовать макрос (overscore). Я пробовал несколько способов, но никто из них не работал. Любые идеи, как заставить его работать? Вместо Макрона я получаю '?'Macron in C# консольное приложение

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace kingsdom 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      int n = int.Parse(Console.ReadLine()); 
      string ups = new string ('^', n/2); 
      string midUps = new string('_' ,(n * 2) - (((n/2) * 2) + 4)); 
      string whitespaces = new string(' ', (n * 2) - 2); 
      string downs = new string('_', n/2); 
      string midDowns = new string('\u203E', (n * 2) - (((n/2) * 2) + 4)); 
      Console.WriteLine("{0}{1}{2}{3}{0}{1}{2}", "/", ups, "\\", midUps); 
      for (int i = 0; i < n - 2; i++) 
      { 
       Console.WriteLine("{0}{1}{0}", "|", whitespaces); 
      } 
      Console.WriteLine("{0}{1}{2}{3}{0}{1}{2}", "\\", downs, "/", midDowns); 
     } 
    } 
} 
+0

В чем проблема? Кажется, что ваш код работает отлично. – Chris

+0

@Chris Вместо Macron я получаю "?" – VG98

+0

Это, вероятно, означает, что ваш шрифт не поддерживает символ. Попробуйте https://dotnetfiddle.net/DOyG5w, который, надеюсь, будет работать (ваш браузер, вероятно, имеет юникодные шрифты). – Chris

ответ

3

Консоль может использовать разные кодовые страницы для отображения текста. Не все эти кодовые страницы могут отображать все символы правильно. Например, когда вы используете кодовую страницу 855, которая по умолчанию используется для систем Windows, использующих восточноевропейские языки с кириллицей, символ Макрона не может быть отображен.

Вы можете определить, какой код страницы используется для собственного консольного вывода, установив Console.OutputEncoding в начале вашей главной функции:

Console.OutputEncoding = Encoding.Unicode; 

Это сделает это так, что консоль может отображать любой символ Unicode.

Если вы хотите использовать конкретную кодовую страницу, как, например, 437 (США), можно было бы написать:

Console.OutputEncoding = Encoding.GetEncoding(437); 

Обратите внимание, что с помощью Encoding.Unicode на этом месте требуется, по крайней мере .net версии 4.5.

Для получения более подробной информации см. documentation of property Console.OutputEncoding.