【问题标题】:Instead of currency symbol I get a question mark into the Command Prompt我在命令提示符中得到一个问号,而不是货币符号
【发布时间】:2015-03-16 12:54:53
【问题描述】:

我使用 Windows 7、Visual Studio 2013、C# 和 .NET 4.5。

我的问题是下面一行的输出:

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

myNewCar.determineMarketValue() 返回一个双精度值。

我该如何解决这个问题?

我的输出是这样的:

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);
        }

    }


}

我添加了我的代码 .. 如此简单但没用 :(

更新:代码更新为使用Console.OutputEncoding = System.Text.Encoding.Unicode; 我的货币和控制台设置如下所示:

您可以看到的问题是,即使我将代码更新为使用 unicode,但当我从 VS 执行程序时,我的 cmd 设置更改为使用 Lucida Console 字体,但字体仍然是相同的 Raster 字体选项。

最后编辑:这里是如何快速简单地更改 Visual Studio 控制台使用的控制台字体。现在货币正确显示在我的程序中:Control console font & layout used by C# .NET console application

【问题讨论】:

  • 这将是一个编码问题...确保您没有使用 ASCII 并检查 Unicode / UTF 等。
  • 你能展示一下你得到了什么以及myNewCar.determineMarketValue()的价值吗?
  • 另外:您目前的文化是什么?例如开始->系统设置中的语言设置是什么?那里的货币设置是什么?
  • @strax 您将根据文化获得不同的输出。更多信息请看这里msdn.microsoft.com/en-us/library/dwhawy9k(v=vs.110).aspx
  • 在哪里可以检查我的项目编码设置?

标签: c# linq


【解决方案1】:

添加

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

在写输出之前。

您还应确保控制台字体为 TrueType。

【讨论】:

  • 我的字体选项只有 3 种 Lucida Console、Consolas 和 Raster Fonts
  • @strax 那你只需要试三遍,你就走运了! :)
  • 您可以看到的问题是,即使我将代码更新为使用 unicode,但当我从 VS 执行程序时,我的 cmd 设置更改为使用 Lucida Console 字体,但字体仍然是相同的光栅字体选项。请检查我的更新。
【解决方案2】:

这是设计使然。

.NET 控制台应用程序使用一些预定义的系统字体(通常是 Lucida Console,但也可以是 Consolas 或其他类似字体)输出文本。

该字体不一定有您的货币符号,因此该符号可能显示不正确。请参阅 this link 了解 Lucida 控制台中支持的货币符号。

你不能轻易地在控制台应用程序中修复它,因为在控制台中更改用于显示文本的字体并不容易(我想通过一些 WinAPI 调用是可能的)。

【讨论】:

  • 您可以看到的问题是,即使我将代码更新为使用 unicode,但当我从 VS 执行程序时,我的 cmd 设置更改为使用 Lucida Console 字体,但字体仍然是相同的 Raster 字体选项。请检查我的更新。
  • 如您所见,Lucida Console 支持货币符号
  • @strax ooh .... 您没有准确指定您的货币符号在原始问题中是欧元。是的,Lucida Console 可以输出这个符号(当然,使用Console.OutputEncoding = Encoding.UTF8;)。但我回答的关键点是“您无法确定您的程序在计算机上执行的内容,而您的程序将使用正确的字体,其中包含显示控制台文本所需的所有符号”。正如我所说 - 没有简单的方法可以以编程方式更改控制台字体。看看其中一种方法:blogs.microsoft.co.il/pavely/2009/07/23/changing-console-fonts
  • 你说的是正确的,这里是关于如何快速简单地更改 Visual Studio 控制台使用的控制台字体的答案。现在货币在我的程序中正确显示:stackoverflow.com/questions/4589173/…查看我的最后编辑
【解决方案3】:

只需添加:

using System.Text;
Console.OutputEncoding = Encoding.Default;

然后你可以使用你的键盘€符号......它对我有用! ;)

【讨论】:

    【解决方案4】:

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

    这对我来说还不够,问号被更多不可读的字符所取代。我的控制台程序使用的字体不支持欧元符号。

    Lucida Console 和 Consolas 都可以。

    确保默认启动正确的字体:

    • 启动您的控制台程序(使用 Visual Studio)
    • 选择左上角的控制框
    • 在下拉菜单中选择默认值
    • 在标签字体上选择 Lucida Console 和您喜欢的大小

    现在,当您下次在 Visual Studio 中启动控制台程序时,欧元符号会正确显示。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-23
      • 1970-01-01
      相关资源
      最近更新 更多