【问题标题】:Printing the unicode 'black flag' ⚑ (U+2691) character in cmd.exe在 cmd.exe 中打印 unicode 'black flag' ⚑ (U+2691) 字符
【发布时间】:2015-12-23 18:03:05
【问题描述】:

在 Windows (10) 机器上,为什么我可以在某些地方打印“黑旗”(U+2691) 字符而在其他地方不能打印(尤其是 cmd.exe)?

更新 cmets 中的建议提示(尚无答案): - [来自 Kevin] CMD.exe Unicode 支持是可疑的(未指定,但注销我遇到的奇怪 CMD.exe 行为的问题) - [来自 Mark] 进程应该写入 ConsoleAPI 而不是 stdout。 - [来自李斯特先生] 更改字体。

我更改了 Webstorm 中的字体。它使用monospaced,并正确显示了标志。我切换到ConsolasLucida SansCourier New,并且它们都适用。我查看了the list of supported unicode chars for Lucida Console,确实,U+2691 不在那里。所以 Webstorm 可能有一些后备机制来支持这个角色。

我运行 ConEmu,将基本字体设置为 Lucida Console,将替代字体设置为 DejaVu Sans,我从 here 下载。我不得不手动调整 Unicode 范围,将其设置为 2013-3000。瞧,黑旗出现了。因此,尽管第一部分现在(种类)已解决,但我仍然不知道这里的字体与图形和代码页发生了什么。我认为在处理一些 unicode 时代码页是一个红鲱鱼......所以,如果有人有任何确定的东西,我会喜欢一个正确的答案。 ;-)

注意,我将 cmd.exe 字体设置为 Lucida 控制台,将当前代码页设置为 (UTF-8) 65001。我还尝试了其他字体...和 ​​chcp 1252。是的,我已阅读 the Spolsky post , 这是极好的。我认为我缺少的是 Kevin 在评论中所说的(cmd.exe 没有 proper Unicode 支持)以及 Mark 关于绕过 stdout 的话。这解释了 cmd.exe,但很想了解更多关于 VS、VS Code、NP++ 的信息...

我可以在 chrome 中看到很好的字符:

http://graphemica.com/⚑
http://graphemica.com/%E2%9A%91

我可以在其中一个中看到它:

  • Office(Word、Outlook)
  • 网络风暴
  • Visual Studio

但是,我在这里看不到它(显示为一个框):

  • 记事本++
  • Visual Studio 代码
  • cmd.exe

如果我在节点中运行它:

console.log('\u2691:', '\u2691');
console.log('Flag:', '⚑')

它只是转储盒子(当我在这里复制和粘贴时很好)。

然后还有其他字符,例如:重对号(U+2714)

http://graphemica.com/%E2%9C%94 http://graphemica.com/

在 Visual Studio Code 中“显示”(无法显示标志)但不会显示在 cmd.exe 中。

这里似乎有很多活动部分:Unicode、字符代码、代码页、字体等等。

有人可以帮我解决这个问题吗?这里到底发生了什么?

  1. 为什么字符在某些地方显示而在其他地方不显示?

  2. 有什么办法可以显示 cmd.exe 中的字符吗?

【问题讨论】:

  • 启动 here 并知道 cmd.exe 没有正确的 Unicode 支持。
  • cmd.exe 中显示 Unicode 字符需要直接使用控制台 API 并绕过标准输出。
  • 这个问题出在字体上。 Lucida Console 不包含 ⚑ 或 ✔ 字符。如果您必须使用 cmd.exe,请选择可以使用的字体。或者使用 charmap.exe 检查 Lucida Console 包含的字符并使用其中之一。
  • 回答你的cmets,有些程序在显示字符方面比其他程序更好。例如,图形程序通过切换到另一种字体来做到这一点。文本模式程序没有这样的功能!
  • @MrLister 是对的。您需要手动选择合适的字体供cmdNotepad 等使用(例如,DejaVu Sans Mono 包含的字符字形比常用的CourierLucida Console 等宽字体要多得多) .

标签: windows unicode utf-8 cmd character-encoding


【解决方案1】:

好的,看起来@josefZ 让我最接近答案,所以@josefZ 如果你将我的答案剪切并粘贴到你自己的答案中,我会删除我的。 ;-)

这些是我一直在寻找的答案(我仍然希望有更多关于字体回退和字体与代码页关系的信息):

您无法获得 U+2691 的原因似乎是字体不支持它,而不是代码页问题(至少在我的情况下)。

显然有些程序有伪图形的备用字体。

  • WebStorm 未配置为这样做(我没有启用辅助字体),但它在内部这样做。

  • Visual Studio Code 没有这个设置,但是当我切换到 Deja Vu Mono 时,它显示正常。

具体来说,允许您在 cmd.exe 控制台中使用黑旗: 1.下载Deja Vu Mono字体。 2.解压安装(全选,右键,选择安装) 3.关注these instructions使其在cmd.exe中可用。 4. 进入cmd.exe的偏好设置,选择字体。

替代方案: 1.使用ConEmuset the pseudographics字体到Deja Vu Mono。 2.不要忘记手动设置unicode范围以包括需要的范围(2691,在这种情况下,但我设置为:Pseudographics: 2013-3000

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-18
    • 2013-10-10
    • 2018-06-22
    • 2013-02-03
    • 2017-12-06
    • 1970-01-01
    相关资源
    最近更新 更多