node.js - 如何在 Node.js(在 Windows 上)中将表情符号输出到控制台?

标签 node.js windows unicode console emoji

在 Windows 上,控制台中有一些基本的表情符号支持,因此我可以在键入时获得单色字形,例如📜。我可以从 PowerShell 或 C# 控制台应用程序或 Python 输出字符串,它们都可以很好地显示这些字符。

但是,从 Node.js 中,我只能显示几个表情符号(例如 ),而不能显示其他(而不是 📜 我看到 >�)。但是,如果我 throw 包含这些字符的字符串,它们会正确显示。

console.log(' 📜 ☕ ');
throw ' 📜 ☕ ';

如果我运行上面的脚本,输出是

 � ☕

C:\Code\emojitest\emojitest.js:2
throw ' 📜 ☕ '; 
^
 📜 ☕

无论如何我可以正确输出这些表情符号而不会引发错误?还是该异常发生在我可以通过标准 Node.js API 获得的功能之外?

最佳答案

如果不更改libuv,您想要的可能无法实现。当你(或 控制台)写入 Windows 上的 stdoutstderr 并且流是 TTY, libuv 会自己进行从 UTF-8 到 UTF-16 的转换。在这样做时,它明确 拒绝输出代理对,而是发出替换字符 U+FFFD � 适用于 BMP 之外的任何代码点。

这是 uv/src/win/tty.c 中的罪魁祸首:

  /* We wouldn't mind emitting utf-16 surrogate pairs. Too bad, the */
  /* windows console doesn't really support UTF-16, so just emit the */
  /* replacement character. */
  if (utf8_codepoint > 0xffff) {
    utf8_codepoint = UNICODE_REPLACEMENT_CHARACTER;
  }

throw 消息正确显示,因为 Node 允许 Windows 执行 使用 MultiByteToWideChar() 从 UTF-8 到 UTF-16 的转换(确实会发出 代理对)在将消息写入控制台之前。 (看 PrintErrorString() in src/node.cc .)

注意:A pull request已提交解决此问题。

关于node.js - 如何在 Node.js(在 Windows 上)中将表情符号输出到控制台?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44054983/

相关文章:

javascript - NextJS,Express,WebSocket 握手期间出错 : Unexpected response code: 200

java - 如何在CMD中启动Java程序?

windows - Set-ItemProperty 在某些系统上将注册表值设置为字符串而不是 DWord,为什么?

c# - asp.net 缓存限制?

javascript - 在reduce 和fetch 中fs.writeFile 出现问题

node.js - 咕噜声不工作 : -bash: exec: grunt: not found

java - 将字符串转换为其 Unicode 代码点

unicode - 为什么 Poodle 和浴缸,而不是下标大写字母? (Julia 中的 Unicode)

java - 将符号、重音字母转换为英文字母

javascript - 使用 NodeJS 生成服务器端 HighStock 图表