Help us understand the problem. What is going on with this article?

NimをWindowsに導入してみた+UTF-8をうまく表示できない問題とその解決策

More than 1 year has passed since last update.

はじめに

本記事は、Windows環境へのNim導入において

  • うまくいったこと
  • うまくいかなかったこと

の両方を記録したものであり、同時に、うまくいかなかったことに関して、有識者の助言を求めるものです。(2018/11/24修正)うまくいかなかった部分について、一旦の解決策を提示するものです。

環境

  • Windows10 Home (64bit)
  • Git bash (on ConEmu)

うまくいったこと

Nimのインストール

  1. 公式のWindows向けインストール案内ページからx86_64.zipをダウンロードしてC:\nim-0.19.0に展開
  2. インストール案内ページ下部のNotes about compiler dependenciesからmingw64-6.3.0.7zをダウンロードしてC:\nim-0.19.0\dist\mingw64に展開
  3. 環境変数PATHにC:\nim-0.19.0\binC:\nim-0.19.0\dist\mingw64\binを追加

Hello, World

helloworld.nim
echo "Hello, World"

上記ファイルを作成し、Git bash上で、

$ nim c -r helloworld.nim

を実行するとコンパイル+実行される。
※ 引数のcはC言語でコンパイルを意味する。-rはコンパイル後実行の--runオプションの略。

出力は以下のような感じ。

Hint: used config file 'C:\nim-0.19.0\config\nim.cfg' [Conf]
Hint: system [Processing]
Hint: hoge [Processing]
Hint:  [Link]
Hint: operation successful (12269 lines compiled; 0.331 sec total; 16.375MiB peakmem; Debug Build) [SuccessX]
Hint: C:\Users\xxxxx\workspace\nim-works\hoge.exe  [Exec]
Hello, World

開発環境構築

VisualStudioCodeによるNim開発環境

nimファイルを作成&編集し、Ctrl+Shift+Bでビルド&実行し、結果がVSCode内のターミナルに表示されます。

↑この状態にしておけばもっと楽に実行できる。

(2018/11/24追記)が、VSCode上ではUTF-8の日本語が文字化けする。表示確認には別の環境を使わざるを得ないようだ。

うまくいかなかったことと、その解決策

うまくいかなかった現象

UTF-8で日本語を記述したソースコードをコンパイルして実行すると文字化けする。

具体的には、

helloworld2.nim
echo "こんにちは"
# UTF-8で保存

これをコンパイル+実行すると、

$ nim c -r helloworld2.nim
...略...
縺薙s縺ォ縺。縺ッ

こうなる。

化け方からして、UTF-8をSJISで読もうとしているように見える。

解決策1 cmdの文字コード設定変更

(2018/11/24追記)

とりあえずGit bash上で実行することにし、Git bashを実行しているコマンドプロンプトの文字コード設定をUTF-8に変更する。

具体的には、.bashrcに下記のように設定した。

.bashrc
chcp.com 65001 > /dev/nul  # 65001はUTF-8

※ちなみに、Git bash起動時に.bashrcを適用させるためには、下記のような設定が必要っぽい。
Windows Git 2.6.1で~/.bashrcがGit Bashから読み込まれるようにする

$ nim c -r helloworld2.nim
...略...
こんにちは

ひとまずいい感じかな?

解決策2 ソースコードをsjis(cp932)で保存

nimファイルのエンコーディングをsjisにすると素直にうまくいく。

他に試したが、駄目だったこと

以下は解決策を模索しているときに試したことなので、読み飛ばしていただいて問題ないです。

gccオプション追加

nim.cfg(C:\nim-0.19.0\config\nim.cfg)でgcc実行時のオプションを変更できる。

nim.cfg
#141行目~
@elif windows:
  gcc.options.always = "-w -mno-ms-bitfields -finput-charset=utf-8 -fexec-charset=utf-8"
  gcc.cpp.options.always = "-w -fpermissive -mno-ms-bitfields -finput-charset=utf-8 -fexec-charset=utf-8"

この状態で実行してみる。が、結果は変わらず。
コンパイル時の問題というより、UTF-8の標準出力をうまく表示できていないだけ?

localeを確認

$ locale
LANG=ja_JP.UTF-8
LC_CTYPE="ja_JP.UTF-8"
LC_NUMERIC="ja_JP.UTF-8"
LC_TIME="ja_JP.UTF-8"
LC_COLLATE="ja_JP.UTF-8"
LC_MONETARY="ja_JP.UTF-8"
LC_MESSAGES="ja_JP.UTF-8"
LC_ALL=

ここの問題でもなさそう。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away