【发布时间】:2017-10-18 16:40:21
【问题描述】:
在 Windows 上,控制台中有一些基本的表情符号支持,因此我可以在键入时获得单色字形,例如☕ 或 ????。我可以从 PowerShell 或 C# 控制台应用程序或 Python 输出字符串,它们都可以很好地显示这些字符。
但是,从 Node.js 中,我只能显示几个表情符号(例如 ☕),但不能显示其他(而不是 ???? 我看到 �)。但是,如果我 throw 包含这些字符的字符串,它们会正确显示。
console.log(' ???? ☕ ');
throw ' ???? ☕ ';
如果我运行上面的脚本,输出是
� ☕ C:\Code\emojitest\emojitest.js:2 throw ' ???? ☕ '; ^ ???? ☕
无论如何,我可以正确输出这些表情符号而不会引发错误吗?还是该异常发生在我通过标准 Node.js API 可用的范围之外?
【问题讨论】:
-
嗯,你比任何人都走得更远。找到支持字形的字体始终是主要障碍。但是 � 是一个编码问题,并非完全不寻常,因为滚动字形位于高位平面中,而咖啡杯则不是。您可能应该关注为什么它在呈现到 stderr 时是可以的,就像在
throw中一样,而不是到 stdout。 -
@HansPassant 直接写信给
stderr与直接写信给stdout没有什么不同,可能需要看看 Node.js 是如何处理投掷的…… -
似乎是 Windows 问题。它在我的 Mac 上运行良好。
-
现在觉得有点可笑。我刚刚在 Node.js 7.10.0 中尝试了这个示例,它运行良好(我一直在使用最新的 6.x 版本),所以一旦 8.x 发布,这似乎不再是稳定的 Node.js 的问题发布。
-
@bdukes:也许是个愚蠢的问题,但你确定你在完全相同的环境中以完全相同的方式执行完全相同的测试吗?如果是这样,那么我的回答一定是错误的,因为我提到的 libuv 行为在 6.x 和 7.x 之间没有改变。 FWIW 我在 6.x 和 7.x 中得到了相同的结果。
标签: node.js windows unicode console emoji