1

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

字符 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 版本?

4

3 回答 3

4

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

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

string AceOfSpades = "\U0001F0A0";
于 2013-03-02T02:51:24.833 回答
0

我将假设(直到您为清楚起见编辑您的帖子)您的符号显示不正确。如果不是这种情况,我将删除此答案。

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

Console.OutputEncoding = System.Text.Encoding.Unicode

或者

Console.OutputEncoding = System.Text.Encoding.UTF8.

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

于 2013-03-01T23:31:16.383 回答
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++;
 }

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

于 2020-02-13T13:21:24.643 回答