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

时间:2018-10-22 21:11:46

标签: powershell go console

让我们看看这个:

✓ Hello, 世界

如您所见,有一个Unicode复选标记和中文/日语字符。在旅途中,如果我使用MSYS或linux环境,我可以轻松打印这些字符。即使在窗户上。但是,我在CMDPowershell中都看不到它们。

我明白了:

powershell

这是我非常基本的代码:

package main

import (
    "fmt"
)

func main() {

    fmt.Println("✓ Hello, 世界")
    // OR
    fmt.Println("\u2713 Hello, 世界")
}

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

2 个答案:

答案 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之间传递命令。控制台主机。而且它没有任何旧脚本要处理。