首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在c#控制台输出中显示表情符号?

如何在c#控制台输出中显示表情符号?
EN

Stack Overflow用户
提问于 2021-05-12 17:33:18
回答 1查看 8.7K关注 0票数 7

我在控制台的输出表情有问题。

字符串以Unicode标志"\u“开头很好,就像"\u263A"一样。

但是,如果只是简单地将一个表情符号复制并粘贴到字符串中,比如"",它就不能工作。

代码测试如下:

代码语言:javascript
运行
复制
using System;
using System.Text;

namespace Test
{
    class Program
    {
        static void Main(string[] args)
        {

            Console.OutputEncoding = Encoding.UTF8;
            string s1 = "";
            string s1_uni = "\ud83c\udf81"; // unicode code for s1
            string s2 = "☺";
            string s2_uni = "\u263A"; // unicode code for s2
            Console.WriteLine(s1);
            Console.WriteLine(s1_uni);
            Console.WriteLine(s2);
            Console.WriteLine(s2_uni);
            Console.ReadLine();
        }
    }
}

s1s1_uni可以成功输出,而s2s2_uni失败。

我想知道如何解决这个问题。

顺便说一下,应用的字体是“Consolas”,它在Visual中工作得很好。

更新:

请注意,在提出这个问题之前,我已经在堆栈溢出中做了一些搜索。最常见的方法是将控制台编码设置为utf-8,这是在第一行中完成的。

这种方式(Console.OutputEncoding = Encoding.UTF8)不能完全符合我提出的情况。

此外,我在问题中补充控制台字体的原因是声明Consolas字体在VS中显示表情符号时工作得很好,而在控制台中失败了。第一个表情符号没能显示出来.

请不要结束这个问题。谢谢。

Update2:

这个表情符号可以显示在VS终端上。

Update3:

谢谢彼得·杜尼霍的帮助。而且你是对的。

在我们讨论的时候,我浏览了一下MS 对控制台的Unicode支持的文档。

不支持在基本多语言平面(即代理项对)之外显示字符,即使它们是在链接的字体文件中定义的。

表情符号的代码点不能显示在控制台的BMP之外。控制台不支持BMP外部的显示代码点。因此,这个表情没有显示出来。

若要更改可能支持此表情符号的运行上下文,请执行以下操作。我做了一些实验。

CMD:

动力壳:

窗口终端:

您可以看到,windows终端支持它。

严格地说,我遇到的问题不是堆叠溢出的重复问题。因为我的代码只是做了一切可以做的事情来满足需求。问题在于正在运行的上下文,而不是代码。

谢谢彼得·杜尼霍的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-12 19:49:23

当前的Windows命令行控制台cmd.exe仍然使用GDI+来呈现文本。而且它使用的GDI+ API不能正确处理组合/代理项对字符,比如您想要显示的表情符号。

即使使用包含所需字符的字形的字体,以及当您正确地将Console类的输出编码设置为Unicode编码(这两者都在您的示例中完成)时,也是如此。

微软似乎正在对命令提示符代码进行改进,将其升级为使用DirectWrite API而不是GDI+。如果和当这些改进发布时,控制台窗口应该能够正确地显示您的表情符号。见Github发行版UTF-8渲染问题#75

同时,您可以在能够正确呈现这些字符的上下文中运行程序,例如Windows终端或PowerShell。

关于GDI+字体呈现限制的更多详细信息可以在将表情符号支持添加到Windows控制台#190emoji/unicode支持在windows #2693中大部分被破坏中找到(后者本身并不是关于一个Windows组件,但仍然与这个问题有关)。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67508469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档