如何在 C# 控制台中显示扩展 Unicode 字符?

1 c# unicode astral-plane

我正在尝试显示一组扑克牌,其 Unicode 值在 1F0A0 到 1F0DF 范围内。每当我尝试在代码中使用超过 4 个字符的字符时,我都会收到错误。在这种情况下可以使用这些字符吗?我正在使用 Visual Studio 2012。

char AceOfSpades = '\u1F0A0'; 键入后立即出现错误“字符文字中的字符过多”,这仍然显示为 Unicode 或 UTF8 编码。如果我尝试像上面那样显示 '\u1F0A'...使用 Unicode 它会显示 '?' 对于 UTF8,它显示 3 个字符。

我尝试了所有给定的 OutputEncoding string AceOfSpades = "\U0001F0A0"; Default, Unicode, ASCII: ?? UTF7: +2DzcoA- UTF8: 四个奇怪字符 UTF32 , BigEndianUnicode: IOException 选项 Console.OutputEncoding = System.Text.Encoding.UTF32;,尽管是一个选项,但即使它是唯一的代码行也会崩溃。UTF16 不在列表中。

如何查看我正在使用的 Unicode 版本?

R. *_*des 5

为了使用基本多语言平面之外的字符,您需要使用\U, not对其进行转义\u。这需要八个十六进制数字(说实话,这没有什么意义,因为所有 Unicode 字符都可以用六个十六进制数字来编写)。

然而.NET中的类型char只能表示UTF-16代码单元,这意味着BMP之外的字符需要一对chars(代理对)。所以你必须把它变成一个字符串。

string AceOfSpades = "\U0001F0A0";
Run Code Online (Sandbox Code Playgroud)