You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用WinAPI控制台函数读取emoji时返回UTF-8替换字符的问题求助

WinAPI控制台函数读取emoji时返回UTF-8替换字符的问题求助

各位大佬好,我最近做项目碰到个头疼的问题:我需要从Windows控制台读取所有可能的MBCS UTF-8码点。

我知道Windows内部是用wchar_t(UTF-16)工作的,所以折腾了一套读取逻辑,用来捕获各种“冷门”的Unicode字符——比如希腊字母、西里尔字母都能正常读取,中日韩文字也没问题,各种数学符号也能正确识别,但只要输入emoji或者一些特殊的4字节长度码点,返回的就不是预期的UTF-8序列,而是EF BF BD这个替换字符对应的序列。比如输入😀这个emoji,我预期得到的十六进制序列是F0 9F 98 80,但实际返回的却是EF BF BD。

我已经试过把控制台代码页改成65001,也分别测试过老版的legacy conhost(我知道它本来emoji支持就差)和新版的Windows Terminal(明明是支持emoji显示和输入的),但不管用哪个终端,问题都存在。

我用来读取输入并转换为对应十六进制MBCS表示的代码如下:
(注:原提问中代码未完整贴出)

备注:内容来源于stack exchange,提问作者Anic17

火山引擎 最新活动