如何在 Windows 上的 Go (golang) 中打印 UTF-8(或 unicode)字符

Pra*_*tha 6 console powershell go

让我们看看这个:

\n\n
\xe2\x9c\x93 Hello, \xe4\xb8\x96\xe7\x95\x8c\n
Run Code Online (Sandbox Code Playgroud)\n\n

正如您所看到的,有一个 unicode 复选标记和中文/日文字符。在 go 中,如果我使用 MSYS 或 linux 环境,我可以轻松打印这些字符。即使在窗户上。但是,我无法在CMD或 中看到它们Powershell

\n\n

我懂了:

\n\n

电源外壳

\n\n

这是我非常基本的代码:

\n\n
package main\n\nimport (\n    "fmt"\n)\n\nfunc main() {\n\n    fmt.Println("\xe2\x9c\x93 Hello, \xe4\xb8\x96\xe7\x95\x8c")\n    // OR\n    fmt.Println("\\u2713 Hello, \xe4\xb8\x96\xe7\x95\x8c")\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

此外,我有数十个控制台应用程序,它们能够使用 cmd 或 powershell 在我的窗口上显示此类字符。为什么去不了?

\n

pet*_*rSO 5

Windows cmd 和 PowerShell 控制台的问题是 Consolas 和 Lucida Console 等字体中缺少 CJK 字符。在 Windows 10 上,将控制台字体更改为支持 CJK 字符的字体,例如 NSimSun 或 SimSun-ExtB。

\n\n

例如,

\n\n

font.go:

\n\n
package main\n\nimport (\n    "fmt"\n)\n\nfunc main() {\n    fmt.Println("\xe2\x9c\x93 Hello, \xe4\xb8\x96\xe7\x95\x8c")\n    // OR\n    fmt.Println("\\u2713 Hello, \xe4\xb8\x96\xe7\x95\x8c")\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

输出(NSimSun):

\n\n
Microsoft Windows [Version 10.0.17134.345]\n>go version\ngo version devel +47cc59f31f Tue Oct 23 00:29:57 2018 +0000 windows/amd64\n>go run font.go\n\xe2\x9c\x93 Hello, \xe4\xb8\x96\xe7\x95\x8c\n\xe2\x9c\x93 Hello, \xe4\xb8\x96\xe7\x95\x8c\n>\n
Run Code Online (Sandbox Code Playgroud)\n