2013年11月4日月曜日

MinGW + MSYS で日本語

C/C++ Hello Worldでは、わざと日本語の使用を避けていました。日本語を扱うには色々と問題があり、設定などが難しかったためです。

gccのコンパイルで警告になることがある

printf("Hello World¥n");でなく、 printf("こんにちは¥n”);とした場合は問題になりませんが、printf("ソフトウェア¥n”);とした場合にはコンパイル時に警告が表示されます。

なぜかというと円マーク(¥)が原因です。円マークは文字コードが0x5Cなのですが(Linuxでは0x5Cの表示がバックスラッシュ(\)の場合もあります)、Windowsが標準で使用している文字コードのCP932(ShiftJISの一種)では、「ソ」は0x83,0x5Cの2バイトとなっていて、コンパイラが2つ目の0x5Cを円マーク(¥)と間違うためです。他にも「表」などが同様に問題があります。


その対策では、--input-chaset=CP932というオプションを付けます。するとgccは文字コードをUTF-8 に変換してからコンパイルします。しかし、これだけではprintf()で文字化けします。--exec-charset=CP932とすることで、実行ファイル内部の文字列をCP932に変換します。



そもそもvimで日本語入力ができない

まずはvimで日本語が化けます。この対策で、.vimrcの最後の行に
set enc=japan
と入れると良いようです。ここを参照させていただきました。

しかし、日本語入力はうまく行きません。Alt+半角/全角で日本語入力への切換ができるのですが、vimの画面では変な風にスクロールしていってしまいます。
この対策にはminttyを使うと良いようです。以下でセットアップできます。

$ mingw-get install msys-mintty

"mintty -"(ハイフンが必要)を実行するか、msys.batを起動するときに -minttyオプションを付けるとminttyがが起動します。mintty上で起動したvimであれば日本語入力が出来ます。ここを参照させていただきました。以下はminttyの画面です。



さらに日本語ファイル名を使う

上記ではlsで日本語のファイル名がまた文字化けしますし、入力もできません。以下を行うと日本語ファイル名が使えるようになります。

/etc/profileのファイルを編集して最後に以下を追加します。
alias ls='ls --show-control-char'

また、~/.inputrcを編集して16行目以降を以下のように変更します。
# disable/enable 8bit input
set meta-flag on
set input-meta on
set output-meta on
set convert-meta off

同じくここを参照させていただきました。

0 件のコメント:

コメントを投稿