在Windows(10)框中,为什么我要打印黑旗' (U + 2691)字符在某些地方而不是其他地方(特别是cmd.exe)?
使用评论中提议的提示进行更新(尚无答案): - [来自Kevin] CMD.exe Unicode支持是可疑的(未指定,但注销我遇到的奇怪CMD.exe行为的问题) - [来自Mark]进程应该写入ConsoleAPI而不是stdout。 - [来自李斯特先生]更改字体。
我更改了Webstorm中的字体。它正在使用monospaced
,并正确显示了标志。我切换到Consolas
,Lucida Sans
和Courier New
,并且它在所有这些中都有效。我看了the list of supported unicode chars for Lucida Console,事实上,U + 2691不在那里。因此,Webstorm可能会有一些后备机制来支持这个角色。
我运行ConEmu,并将基本字体设置为Lucida控制台,将替代字体设置为DejaVu Sans,我从here下载。我必须手动调整Unicode范围,将其设置为2013-3000。瞧,黑旗显示出来了。因此,虽然第一部分现在(有点)已经解决,但我仍然不知道这里的字体与图形和代码页是怎么回事。我认为在处理一些unicode时,代码页是一个红色的鲱鱼...所以,如果有人有任何确定的话,我会喜欢一个正确的答案。 ; - )
注意,我将cmd.exe字体设置为Lucida控制台和当前代码页为(UTF-8)65001。我还尝试过其他字体...和chcp 1252.是的,我已阅读{{3这是非常好的。我认为我缺少的是Kevin在评论中所说的内容(cmd.exe没有正确的 Unicode支持)以及Mark关于绕过stdout的内容。这解释了cmd.exe,但很想知道更多关于VS vs VS Code和NP ++ ...
我可以看到chrome中的字符很好:
http://graphemica.com/⚑
http://graphemica.com/%E2%9A%91
我可以在其中一个中看到它很好:
但是,我在这里看不到它(显示为方框):
如果我在节点中运行它:
console.log('\u2691:', '\u2691');
console.log('Flag:', '⚑')
它只是转储盒子(当我在这里复制和粘贴时很好)。
然后还有其他字符如:重复复选标记(U + 2714)
the Spolsky post http://graphemica.com/%E2%9C%94✔
其中'出现'在Visual Studio代码中(无法显示标志)但不会显示在cmd.exe中。
这里似乎有很多活动部分:Unicode,字符代码,代码页,字体等等。
有人可以帮我解决这个问题吗?到底发生了什么?
为什么角色会在某些地方展示而不在另一个地方展示?
我有什么办法可以在cmd.exe中显示字符吗?
答案 0 :(得分:0)
好吧,似乎@josefZ让我最接近答案,所以@josefZ如果你将我的答案剪切并粘贴到你自己,我会删除我的。 ; - )
这些是我一直在寻找的答案(我仍然希望有更多关于字体后备和字体与代码页关系的信息):
看来你无法获得U + 2691的原因是Font不支持它,而不是代码页问题(至少在我的情况下)。
显然有些程序有伪图的备份字体。
WebStorm未配置为执行此操作(我没有启用辅助字体),但它在内部执行此操作。
Visual Studio Code没有这个设置,但当我切换到Deja Vu Mono时,它显示正常。
具体来说,允许您在cmd.exe控制台中使用黑旗: 1.下载Deja Vu Mono字体。 2.解压缩并安装它(全选,右键单击,选择安装) 3.按照these instructions使其在cmd.exe中可用。 4.转到cmd.exe的首选项并选择字体。
替代品:
1.对Deja Vu Mono使用ConEmu和set the pseudographics字体。
2.不要忘记手动设置unicode范围以包括所需的范围(2691
,在这种情况下,但我将其设置为:Pseudographics: 2013-3000
)
希望这有帮助。