2015-03-16 22 views
6

Używam Windows 7, Visual Studio 2013, C# i .NET 4.5.Zamiast symbolu waluty otrzymuję znak zapytania do wiersza polecenia

Mój problem jest wyjście linii poniżej:

Console.WriteLine("Car`s value: {0:C} ", myNewCar.determineMarketValue()); 

myNewCar.determineMarketValue() zwraca podwójne.

Jak mogę rozwiązać ten problem?

moje wyjście to: qmarkc#

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

namespace Lesson15SimpleClasses 
{ 
    class Program 
    { 

     static void Main(string[] args) 
     { 
      Car myNewCar = new Car(); 
      myNewCar.Make = "Oldsmobile"; 
      myNewCar.Model = "Cutlas Supreme"; 
      myNewCar.Year = 1986; 
      myNewCar.Color = "Silver"; 

      Console.OutputEncoding = System.Text.Encoding.Unicode; 

       Console.WriteLine("{0} - {1} - {2}", 
       myNewCar.Make, 
       myNewCar.Model, 
       myNewCar.Color); 


      Console.WriteLine("Car`s value: {0:C} ", myNewCar.determineMarketValue()); 

      Console.ReadLine(); 
     } 

    } 

    class Car 
    { 

     public string Make { get; set; } 
     public string Model { get; set; } 
     public int Year { get; set; } 
     public string Color { get; set; } 

     public double determineMarketValue() 
     { 
      double carValue = 100.0; 

      if (this.Year > 1990) 
       carValue = 10000.0; 
      else 
       carValue = 2000.0; 

      return (carValue); 
     } 

    } 


} 

dodałam mój kod ..so prosty, ale doent pracy :(

Aktualizacja: Kod zaktualizowane do korzystania Console.OutputEncoding = System.Text.Encoding.Unicode; a także moje waluty i konsoli konfiguracyjnej są pokazane poniżej: enter image description here

Problem, jak widać, mimo że zaktualizowałem mój kod, aby używać kodu Unicode ged moje ustawienia cmd do używania czcionki Lucida Console, gdy wykonuję program z VS, czcionka pozostaje ta sama opcja czcionek rastrowych.

LAST EDIT: Oto jak zmienić czcionkę konsoli używanej przez konsoli Visual Studio szybko i simple.Now walucie pojawia się prawidłowo w moim programie: Control console font & layout used by C# .NET console application

+2

To będzie problem z kodowaniem ... Upewnij się, że nie korzystasz z ASCII i kasy Unicode/UTF itp. – Belogix

+0

Czy możesz pokazać, co otrzymujesz, a także wartość 'myNewCar.determineMarketValue()'? –

+0

Tak 1 minuta pls – strax

Odpowiedz

2

Jest to zgodne z projektem.

. Aplikacja konsoli konwertuje tekst za pomocą pewnej predefiniowanej czcionki systemowej (zwykle Lucida Console, ale może to być Consolas lub inna podobna czcionka).

Ta czcionka nie jest niezbędna ma symbol Twojej waluty, więc symbol może być wyświetlany niepoprawnie. Zobacz this link dla obsługiwanych symboli walut w konsoli Lucida.

Nie można go łatwo naprawić w aplikacji konsolowej tylko dlatego, że nie jest tak łatwo zmienić czcionkę używaną do wyświetlania tekstu w konsoli (jest to możliwe w przypadku niektórych wywołań WinAPI, jak przypuszczam).

+0

Problem, jak widać, mimo że zaktualizowałem swój kod, aby użyć unicode, zmieniłem moje ustawienia cmd, aby użyć czcionki Lucida Console, gdy wykonuję program z VS, czcionka pozostaje ta sama z opcją czcionek rastrowych. Sprawdź moją aktualizację. – strax

+0

Jak widać symbol waluty jest obsługiwany przez Lucida Console – strax

+1

@strax ooh .... nie podano dokładnie, że symbolem waluty jest euro w oryginalnym pytaniu. Tak, Lucida Console może wypisać ten symbol (oczywiście używając 'Console.OutputEncoding = Encoding.UTF8;'). Ale kluczową kwestią mojej odpowiedzi było coś w rodzaju: "nie możesz być pewien, jaki program jest wykonywany na komputerze, a twój będzie używał poprawnej czcionki posiadającej wszystkie symbole potrzebne do wyświetlania tekstu konsoli". Jak już powiedziałem - nie ma prostego sposobu na programową zmianę czcionki konsoli. Rzuć okiem na jedno z podejść: http://blogs.microsoft.co.il/pavely/2009/07/23/changing-console-fonts/ –

6

Dodaj

Console.OutputEncoding = System.Text.Encoding.Unicode; 

przed napisaniem wyjście.

Należy również upewnić się, że czcionką konsoli jest TrueType.

+0

Moje opcje czcionek to tylko 3 Lucida Console, Consolas i Raster Czcionki – strax

+0

@strax Następnie wystarczy spróbować trzy razy, masz szczęście! :) – xanatos

+0

Problem w tym, że mimo iż zaktualizowałem swój kod, aby użyć unicode, zmieniłem moje ustawienia cmd, aby użyć czcionki Lucida Console, gdy wykonuję program z VS, czcionka pozostaje taka sama jak czcionki rastrowe. Sprawdź moją aktualizację. – strax

0

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

To nie było dla mnie za mało, znak zapytania została zastąpiona nawet bardziej nieczytelnych znaków. Czcionka używana przez mój program konsoli nie obsługuje znaku euro.

Lucida Console i Consolas oba.

Aby upewnić się, że prawidłowa czcionka jest uruchamiany domyślnie:

  • Uruchom program konsoli (przy użyciu visual studio)
  • Zaznacz pole sterowania w lewym górnym rogu
  • w rozwijanym menu wybierz Ustawienia domyślne
  • Na czcionek wybierz zakładkę Lucida Console i wielkość są wygodne z

N Po następnym uruchomieniu programu konsoli w studio wizualnym znak euro jest wyświetlany poprawnie.