猿问

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

让我们来看看这个:


✓ Hello, 世界

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


我懂了:


电源外壳


这是我非常基本的代码:


package main


import (

    "fmt"

)


func main() {


    fmt.Println("✓ Hello, 世界")

    // OR

    fmt.Println("\u2713 Hello, 世界")

}

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


翻阅古今
浏览 251回答 3
3回答

万千封印

Windows cmd 和 PowerShell 控制台的问题是 Consolas 和 Lucida Console 等字体中缺少 CJK 字符。在 Windows 10 上,将控制台字体更改为支持 CJK 字符的字体,例如 NSimSun 或 SimSun-ExtB。例如,font.go:package mainimport (    "fmt")func main() {    fmt.Println("✓ Hello, 世界")    // OR    fmt.Println("\u2713 Hello, 世界")}输出(NSimSun):Microsoft Windows [Version 10.0.17134.345]>go versiongo version devel +47cc59f31f Tue Oct 23 00:29:57 2018 +0000 windows/amd64>go run font.go✓ Hello, 世界✓ Hello, 世界>

料青山看我应如是

尝试在Windows PowerShell ISE中运行。它对显示 Unicode 有很好的支持。CMD 和 PowerShell 不能很好地支持命令行 shell中的 Unicode 字体,因为它们并不是真正使用“字体”来显示文本,而是使用转换为字符的 ANSI/VT 代码页。因此,尽管 PowerShell 能够在内部支持 Unicode,并且您可以在对象和函数之间传递它们,但命令行 shell根本无法显示它们,因为代码页和显示之间的转换不存在。Windows PowerShell ISE 不同于从命令行shell运行 PowerShell ,因为 ISE 显示输出并且不必使用 ANSI/VT 序列在 shell 和 PowerShell 控制台主机之间传递命令。而且它没有任何遗留脚本需要处理。

MM们

使用Windows 终端。您可以在 Microsoft Store 上获得它。
随时随地看视频慕课网APP

相关分类

Go
我要回答