2012年5月8日火曜日

GoをWindowsで動かすと日本語が表示できない

先日紹介したGoogle発の開発言語Goですが、
内部での文字コードはすべてUTF-8となっており例外は認められていないようです。
まあすべてUTF-8に統一してもらったほうが個人的にはありがたかったりします。
Linuxの世界ではだいぶ前からUTF-8ですし、
Windowsでもテキストエディタは大体UTF-8対応しています。
サクラエディタでも、メニューの[ファイル]-[開き直す]-[UTF-8で開き直す]を実行すれば
確実にUTF-8で扱えます。

が、Windowsで問題発生です。
package main

import "fmt"

func main() {
 fmt.Println("Hello, 世界")
}
のようなプログラムをWindowsのコマンドプロンプト(というかcygwinのbash)で実行すると
"世界"が正常に表示されません。
これはコマンドプロンプトのコードページがシフトJISになっているためで、
単なる文字化けです。
コードページを変更する方法を探したところ、
"chcp"コマンドが見つかりました。
UTF-8に変更したければ
chcp 65001
を実行すればよいそうです。
ちなみに、シフトJISに戻したければ
chcp 932      
を実行することになります。
このあたりのコードページの番号の詳細はここに書かれています。
なお、この"chcp"コマンドはコマンドプロンプトのシェル("cmd.exe")の内部コマンドのようなので、
cygwinのbashでコードページを変えたい場合はbashを起動する前に実行する必要があります。
"C:\cygwin\Cygwin.bat"のバッチファイル中のbashの行のすぐ上にchcpを実行するようにしておけばいいでしょう。
どうでもいいことですが、bash実行中に"cmd"を実行してchcpし、
さらにbashを実行するのもありといえばありです。

コードページをUTF-8に変更したことで完璧かと思ったのもつかの間、
実行してみるとやはり文字化けします。
どうもUTF-8に変更した瞬間にフォントも変わっているようです。
そして選択可能なフォントに日本語フォントが含まれていない…
ここでコマンドプロンプトを使う方法はあきらめました。

ただ他にも方法はあって、teraterm
メニューの[ファイル]-[Cygwin接続]を実行して、
メニュー[設定]-[端末]の[漢字-受信]を"UTF-8"に設定すれば何とかなります。

まあ日本語を表示させなければコマンドプロンプトでも実行できますし、
そんなに気にもならないかなと。

0 件のコメント:

コメントを投稿