所以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"
我正在使用vim,set 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
那是什么给出的?为什么我的vim创建的hello.go
脚本上面打印出乱码,但我的nano创建hello2.go
(其中包含相同的代码行)却没有?
$ file hello2.go
hello2.go: C source, UTF-8 Unicode text
事实上,当我用hello.go
打开vim创建的nano
时,源代码现在显示为: -
package main
import "fmt"
func main() {
fmt.Println("Hello 世界")
}
但是如果我用hello.go
打开相同的vim创建的vim
,源代码会显示: -
package main
import "fmt"
func main() {
fmt.Println("Hello, 世界")
}
为什么会这样?
答案 0 :(得分:5)
这是我.vimrc
中导致我出现此问题的违规行。
if has("gui_running")
set guitablabel=%t%=%m "Set the label of the tabs
set nomacatsui anti enc=utf-8 tenc=macroman gfn=Monaco:h11
" set window size
set lines=40
set columns=120
else
set enc=utf-8 tenc=macroman gfn=Monaco:h11
set fenc=utf-8
endif
具体来说,tenc=macroman
在终端级别搞砸了我的编码。
将其切换到tenc=utf-8
,一切都很好。
在这个我应该看到这个即将到来的问题上浪费了4个小时的生命!啊。
答案 1 :(得分:1)
最有可能的问题与Windows“命令提示符”(控制台)工具属性中使用的字体有关。
点击左上角的菜单图标,选择“属性”, 然后“字体”选项卡。在我的Windows 8.1机器默认是“光栅字体”,我得到问号?????而不是Unicode字符,由Go Lang程序中的UTF8编码。
解决方案是选择一种TrueType字体,“Consolas”或“Lucida Console”