【问题标题】:Encoding for characters in C#C#中的字符编码
【发布时间】:2013-11-09 16:30:24
【问题描述】:

我正在独自读书。书中说我可以使用Unicode 表中的所有符号(尽管解释得不是很好)。但不知何故我做不到。这是我测试的代码:

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

namespace HelloWorld
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.OutputEncoding = System.Text.Encoding.UTF8;
            char a = '\u2605';
            Console.WriteLine(a);
        }
    }
}

代码应该打印一个星号,但输出是

“E”

你能告诉我怎样才能毫无问题地使用表格中的任何符号吗?

【问题讨论】:

  • 我怀疑问题在于您使用的控制台并不真正支持完整的 Unicode。这不是这里的 C# 问题 - 这是一个说服控制台做你想做的事情的问题 :( 如果你通过 MessageBox.Show 显示相同的字符,那很好。
  • 是的,我尝试制作一个 WPF 应用程序,一切正常。
  • 问题可能是控制台的字体不支持那些 gyphs

标签: c# unicode encoding windows-console


【解决方案1】:

您要查找的是Unicode 编码:

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

如前所述,它仅在控制台支持 Unicode 时才有效。此外,使用的字体还需要支持 Unicode 字符才能显示它们。例如,Lucida Console支持U+2605,但支持does support other characters

Console.OutputEncoding = System.Text.Encoding.Unicode;
char a = '\u2191';
Console.WriteLine(a);

以上代码将使用ConsolasLucida ConsoleRaster Fonts 在我的控制台中打印一个向上的箭头。

【讨论】:

  • 只有在控制台实际上支持的情况下。 (例如,它不适用于我的。)
  • LINQPAD 用System.Text.Encoding.UTF8 抛出一个IOException,但用System.Text.Encoding.Unicode 编译得很好。使用 unicode,可以正确打印黑色星形。
  • @JeroenVannevel:我希望它能够正确编译。而在 LINQPad 上有效的东西可能并不适用于任何地方......
  • 感谢您的回答。我试过了,但是有异常:未处理的异常:System.IO.IOException:参数不正确。
  • @JonSkeet:我意识到这是输出方法的问题,我只是将我的结果与 LINQPad 输出共享。编辑:看起来它确实可以编译,但在运行时会抛出一个IOException。我猜还是习惯了 LP ;)
【解决方案2】:

我很确定你需要先将你的字符转换为字符串,试试

Console.WriteLine(a.ToString());

【讨论】:

  • 因为它错了——就这么简单。 Console.WriteLine(char) 完全有效。
猜你喜欢
  • 2013-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-31
  • 2016-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多