2013-03-01 66 views
0

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

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?

+2

你是什么意思“我得到错误”?你的意思是编译时错误,还是只是不能正确显示?这是在命令行控制台上吗? – 2013-03-01 23:25:42

+0

另外,请提供一个简单的代码示例,说明您面临的问题。 – millimoose 2013-03-01 23:31:18

+0

我认为输出从\ u0000到\ uFFFF有限,但我现在可能会混淆。 – 2013-03-01 23:39:14

回答

0

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

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

Console.OutputEncoding = System.Text.Encoding.Unicode

Console.OutputEncoding = System.Text.Encoding.UTF8

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

+0

'char AceOfSpades ='\ u1F0A0';' 立即输入后给我错误 “字符文字太多字符” 这仍然显示与Unicode或UTF8编码。 如果我尝试显示上面的'\ u1F0A'... 使用Unicode时,它显示'?' 使用UTF8它显示3个字符。 – 2013-03-02 01:03:34

+0

@Nigel你必须写'string ace =“\ U0001F0A0”'如果你把它转换成char数组,你会注意到它的长度为2,因为黑桃字符的ace在UTF-16的扩展平面上,所以必须由两个16位'char'表示,称为'代理对'。因此,您不能将黑桃字符的ace存储在一个只能占用16位的“char”中。 – 2013-07-20 16:56:26

1

为了使用基本多语言平面以外的字符,您需要使用\U而不是\u进行转义。这需要8个十六进制数字(老实说,这是毫无意义的,因为所有的Unicode字符都可以用六个十六进制数字来编写)。

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

string AceOfSpades = "\U0001F0A0"; 
+0

查阅char的文档: http://msdn.microsoft.com/en-us/library/system.char(v=vs.71).aspx “Char值类型表示Unicode字符,也称为一个Unicode代码点,并且实现为一个16位数字,范围从十六进制0x0000到0xFFFF。一个Char不能表示一个Unicode字符,它被编码为代理对,但是,一个字符串,它是Char的集合对象,可以表示编码为代理对的Unicode字符。“ – 2013-07-16 16:03:37

+0

@Ciemnl你想让我在那里检查什么? (FWIW http://msdn.microsoft.com/en-us/library/system.char.aspx是文档的最新版本) – 2013-07-16 20:38:40

+0

哎呀,没关系,我发布了这个以强化您的观点。 – 2013-07-20 16:57:54

相关问题