使用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




