その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
実際、vim-created hello.go
withを開くとnano
、ソースコードは次のようになります。
package main
import "fmt"
func main() {
fmt.Println("Hello 世界")
}
しかし、同じ vim で作成されたものを開くhello.go
とvim
、ソース コードは次のようになります。
package main
import "fmt"
func main() {
fmt.Println("Hello, 世界")
}
これはなぜですか?