2

その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-8set 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.gowithを開くとnano、ソースコードは次のようになります。

package main

import "fmt"

func main() {
        fmt.Println("Hello 世界")
}

しかし、同じ vim で作成されたものを開くhello.govim、ソース コードは次のようになります。

package main

import "fmt"

func main() {
    fmt.Println("Hello, 世界")
}

これはなぜですか?

4

2 に答える 2

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 時間を無駄にしました! うーん。

于 2013-02-17T09:41:33.807 に答える
1

この問題は、Windows の「コマンド プロンプト」(コンソール) ツール プロパティで使用されるフォントに関連している可能性があります。

左上隅のメニュー アイコンをクリックし、[プロパティ]、[フォント] タブの順に選択します。Windows 8.1 マシンのデフォルトは「ラスター フォント」で、クエスチョン マークが表示されました????? Go Lang プログラムで UTF8 でエンコードされた Unicode 文字の代わりに。

解決策は、TrueType フォント、「Consolas」または「Lucida Console」のいずれかを選択することです。

于 2015-06-28T19:38:38.893 に答える