我正在尝试显示一组扑克牌,其中包含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版本?
答案 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++;
}
您还需要支持这些字体的字体。