如何在Windows控制台中正确显示Mocha的Unicode输出?

12
当我运行Mocha时,它会尝试显示一个勾号或X,分别表示测试运行是否通过或失败。我看到过Mocha输出的漂亮截图,但这些截图都是在Mac或Linux上拍摄的。在Windows的控制台窗口中,这些字符都显示为一个无描述的空框字符,即经典的“咦?”字形:

Screenshot of Mocha in the Windows console, with a box character instead of the expected check mark

如果我在控制台窗口中突出显示文本并将其复制到剪贴板中,我确实可以看到实际的Unicode字符;我可以将这些花式字符粘贴到Web浏览器中的文本框中,它们会正常呈现(✔,✖)。因此,Unicode输出已经很好地传递到了控制台窗口;问题在于控制台窗口不能正确地显示这些字符。
如何修复此问题,以便Mocha的所有输出(包括✔和✖)在Windows控制台中正常显示?
2个回答

25
通过将这些字符粘贴到 LinqPad 中,我能够确定它们是 “重复检查标记” (U+2714)“重复乘法 X” (U+2716)。看起来在 Windows 7 可用的所有控制台字体 (Consolas、Lucida Console 或 Raster Fonts) 中都不支持这两个字符。实际上,在 Windows 7 中随附的 所有 字体中,只有少数几种支持这些字符 (Meiryo、Meiryo UI、MS Gothic、MS Mincho、MS PGothic、MS PMincho、MS UI Gothic 和 Segoe UI Symbol)。“以“ MS” 开头的那些都是定宽字体,但在控制台典型字体大小下它们看起来都很糟糕。而其它字体也行不通,因为控制台需要定宽字体。

所以你需要下载字体。我喜欢 DejaVu Sans Mono —— 它是免费的,控制台大小看起来很好,易于区分 0O,以及 1Il,而且还有各种花式的 Unicode 符号,包括 Mocha 使用的勾和 X。

DejaVu Sans Mono 字体示例

很不幸,安装新的控制台字体有点麻烦,但仍可行。 (步骤改编自 Scott Hanselman 的这篇文章,但包括非显而易见的 subtelities 000 。)
步骤如下:
  1. 下载 DejaVu 字体 ,解压文件。 进入你刚解压的 "ttf" 目录,选择所有文件,右键单击然后“安装”。
  2. 运行 Regedit,并转到 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont
  3. 添加新的字符串值。 给它一个名称,该名称是已经存在的最长字符串中的一个零字符长度再加一.例如,在我的 Windows 7 安装中,已经有一个名为 0 和一个名为 00 的值,所以我必须将新的名称命名为 000
  4. 双击您的新值,并将其值设置为 DejaVu Sans Mono
  5. 重新启动计算机。(是的,至少在Windows 7及以下操作系统中,此步骤是必要的。)
  6. 现在,您可以打开控制台窗口,打开窗口菜单,转到默认值 > 字体选项卡,然后“DejaVu Sans Mono”应该在字体列表框中可用。选择它并单击确定。
这样就能使 Mocha 的输出以所有其辉煌的方式显示了。 Mocha 输出正确显示在 Windows 控制台的截屏

在Windows 7上,我不需要重新启动。 - xori
Windows 10也不需要重新启动。 - MTJ

7
更新:此问题现已修复。从 Mocha 1.7.0 开始,对于默认控制台字体中不存在的符号会使用回退方案(√代替✔,×代替✖等)。虽然不如原本的符号好看,但这肯定比使用空白占位符号要好得多。
有关详细信息,请参阅相关的 Pull Request:https://github.com/visionmedia/mocha/pull/641

2
这实际上是一个比我的更好、更积极的答案——它使得一切都能正常工作。感谢您让这成为可能! - Joe White
没问题,伙计 :) 现在让我们在Windows上用Mocha一起玩耍吧! - jsalonen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接