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

时间:2013-03-01 23:24:15

标签: c# unicode astral-plane

我正在尝试显示一组扑克牌,其中包含1F0A0到1F0DF范围内的Unicode值。每当我尝试在代码中使用超过4个字符的字符时,我就会出错。是否可以在此上下文中使用这些字符?我正在使用Visual Studio 2012。

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

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

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

3 个答案:

答案 0 :(得分:1)

要使用Basic Multilingual Plane外部的字符,您需要使用\U而不是\u来转义它们。这需要八个十六进制数字(说实话,这没有多大意义,因为所有Unicode字符都可以用六个十六进制数字写入)。

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

string AceOfSpades = "\U0001F0A0";

答案 1 :(得分:0)

我将假设(直到您为了清晰起见编辑帖子)您的符号显示不正确。如果不是这样,我会删除这个答案。

将控制台的编码设置为Unicode或UTF-8。

Console.OutputEncoding = System.Text.Encoding.Unicode

Console.OutputEncoding = System.Text.Encoding.UTF8

确保字体可以显示Unicode / UTF-8字符(如Lucida Console)。

答案 2 :(得分:0)

我正在Windows应用程序(而非控制台)中显示10个来自扩展Unicode的埃及象形文字:

string single_character = "\U00013000";//first ancient hieroglyph

//get the Unicode index
Encoding enc = new UTF32Encoding(false, true, true);
byte[] b = enc.GetBytes(single_character);
Int32 code = BitConverter.ToInt32(b, 0);

for (int i = 0; i < 10; i++)
{
   //convert from int Unicode index to display character
   string glyph = Char.ConvertFromUtf32(code); //single one

   textBox1.Text += glyph;

   code++;
 }

您还需要支持这些字体的字体。