golang:为什么终端stdout不打印出utf-8字符?

因此golang被设计为正确处理unicode / utf-8。


但是,我似乎无法在终端的标准输出中正确打印出utf-8字符。


最简单的程序在这里:


package main


import "fmt"


func main() {

    fmt.Println("Hello, 世界")

}

执行时,显示编码的字符。


$ go run hello.go

Hello, 世界

我的终端的语言环境设置正确:


$ locale

LANG="en_US.UTF-8"

LC_COLLATE="en_US.UTF-8"

LC_CTYPE="en_US.UTF-8"

LC_MESSAGES="en_US.UTF-8"

LC_MONETARY="en_US.UTF-8"

LC_NUMERIC="en_US.UTF-8"

LC_TIME="en_US.UTF-8"

LC_ALL="en_US.UTF-8"

我正在使用vimset encoding=utf-8并将其set fileencodings=utf-8包含在我的.vimrc文件中。


这实际上可能是一个vim问题。我曾经nano从头开始编写此脚本并命名,hello2.go然后打印输出实际上可以Hello, 世界正确打印。但是用hello.go创建的原始脚本vim只会给我带来混乱Hello, ‰∏ñÁïå。


因此,只需仔细检查一下我的vim创建的hello.go脚本是否为UTF-8 Unicode文本,即可file在其上运行命令。像这样:-


$ file hello.go

hello.go: C source, UTF-8 Unicode text

那有什么呢?为什么我hello.go上面的vim创建的脚本打印出乱码,而我的nano创建的hello2.go(包含相同的确切代码行)却不打印出来?


$ file hello2.go

hello2.go: C source, UTF-8 Unicode text

实际上,当我打开用创建的vim-createhello.go时nano,源代码现在显示为:


package main


import "fmt"


func main() {

        fmt.Println("Hello ‰∏ñÁïå")

}

但是,如果我打开同一个VIM创建hello.go有vim,源代码如下: -


package main


import "fmt"


func main() {

    fmt.Println("Hello, 世界")

}

为什么会这样呢?


喵喔喔
浏览 306回答 2
2回答

万千封印

该问题最有可能与Windows“命令提示符”(控制台)工具属性中使用的字体有关。单击左上角的菜单图标,选择“属性”,然后选择“字体”选项卡。在Windows 8.1机器上,默认值为“光栅字体”,并且出现问号????? 而不是Unicode字符,而是通过Go Lang程序中的UTF8进行编码。解决方案是选择TrueType字体之一“ Consolas”或“ Lucida Console”
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go