让我们看看这个:
✓ Hello, 世界
如您所见,有一个Unicode复选标记和中文/日语字符。在旅途中,如果我使用MSYS或linux环境,我可以轻松打印这些字符。即使在窗户上。但是,我在CMD
和Powershell
中都看不到它们。
我明白了:
这是我非常基本的代码:
package main
import (
"fmt"
)
func main() {
fmt.Println("✓ Hello, 世界")
// OR
fmt.Println("\u2713 Hello, 世界")
}
此外,我有数十个控制台应用程序,它们能够使用cmd或powershell在我的窗口上显示此类字符。为什么不能去?
答案 0 :(得分:3)
Windows cmd和PowerShell控制台的问题是缺少诸如Consolas和Lucida Console之类的字体中的CJK字符。在Windows 10上,将控制台字体更改为支持CJK字符的字体,例如NSimSun或SimSun-ExtB。
例如,
font.go
:
package main
import (
"fmt"
)
func main() {
fmt.Println("✓ Hello, 世界")
// OR
fmt.Println("\u2713 Hello, 世界")
}
输出(NSimSun):
Microsoft Windows [Version 10.0.17134.345]
>go version
go version devel +47cc59f31f Tue Oct 23 00:29:57 2018 +0000 windows/amd64
>go run font.go
✓ Hello, 世界
✓ Hello, 世界
>
答案 1 :(得分:1)
尝试在 Windows PowerShell ISE 中运行。
它对显示Unicode有很好的支持。
CMD和PowerShell在命令行外壳中不很好地支持Unicode字体,因为它们不是真的使用“字体”来显示文本,而是ANSI / VT代码页转换为字符。因此,尽管PowerShell能够在内部支持Unicode,并且您可以在对象和函数之间传递它们,但是命令行外壳根本无法显示它们,因为代码页和显示之间不存在转换。可以在这里找到一些使Unicode更好的尝试: Displaying Unicode in Powershell
有关为何CMD和PowerShell无法很好地完成Unicode的有趣阅读,请参阅博客文章系列:Windows Command-Line: Inside the Windows Console
Windows PowerShell ISE与通过命令行shell 运行PowerShell有所不同,因为ISE可以显示输出,并且不必使用ANSI / VT序列即可在shell和PowerShell之间传递命令。控制台主机。而且它没有任何旧脚本要处理。