MSYS2のiconvではJISX0213が変換できない2016年10月10日 18:11

JISX0213の文字集合をコード変換する必要があって、MSYS2にパッケージとして入っているiconvの、対応する符号化方式を調べてみました。
minttyでiconv --listとしましたが、お目当てのEUC-JISX0213, Shift_JISX0213が出てきません。どうやら、MSYS2でパッケージ化されているiconvでは扱えないようです。
GNUのサイト(https://www.gnu.org/software/libiconv/)を見ると、--enable-extra-encodings のオションを付けてビルドすれば良いようです。
OracleのVertualBoxにDebian8をインストールしているので、そちらを起動して仕事は済ませましたが、不便なので自前でiconvをビルドすることにしました。
以下は、その時の記録です。

1) libiconv-1.14.tar.gz をダウンロード
2) 任意のフォルダに展開(私の場合は/c/Temp)
3) cd /c/Temp
4) tar zxvf libiconv-1.14.tar.gz
5) cd libiconv-1.14
6) ./configure --prefix=/mingw32 --enable-extra-encodings
 (私がインストールしているのは、32bit版のMSYS2です。64bit版なら--prefix=/mingw64で良いと思う。)

問題発生!
checking for ld used by GCC...でフリーズしているように見える。
早速、「checking for ld used by GCC」でGoogle検索すると、http://stackoverflow.com/に「MSYS2でbashをビルドしたいけど、checking for ld used by GCCでフリーズするけど?」と質問している人がいた。
回答は以下。
-----------------------------------------------------------------
I do not know why, but I found that the following packages interfered with configure.
(超訳)何や知らんけど、次のパッケージが邪魔してるみたいや。

mingw-w64-i686-grep
mingw-w64-i686-sed
mingw-w64-x86_64-grep
mingw-w64-x86_64-sed

These packages appear to be obsolete. When I removed them configure worked.
(超訳)これらのパッケージは時代遅れみたいや。削除したら動いたでえ。
-----------------------------------------------------------------

私のMSYS2には、mingw-w64-i686-grepがあったので、削除。
勿論、/usr/binに別の(時代遅れでない)パッケージからインストールされたらしいgrepがあるので何も問題ない。

6.1) ./configure --prefix=/mingw32 --enable-extra-encodings
無事に完了した。

7) make
8) make install
9) 確認

> where iconv
C:\msys32\mingw32\bin\iconv.exe
C:\msys32\usr\bin\iconv.exe

> which iconv -a
/mingw32/bin/iconv
/usr/bin/iconv
/bin/iconv

PATHを見ると、/mingw32/binが先にあったので、iconvで起動すればEUC-JIS-2004、 EUC-JISX0213、SHIFT_JIS-2004、SHIFT_JISX0213が使えます。
EUC-JIS-2004とEUC-JISX0213、SHIFT_JIS-2004とSHIFT_JISX0213は同じみたいです。
/usr/bin/iconvはパッケージからインストールされたもので、オプションの符号化方式が使えないものです。
/usr/binと/binは実体は同じです。

以上
2016/10/11 追記
MSYS2の最近のバージョンには、オプションの符号化方式が使えるものも入っているようです。何か問題があったときは、取り敢えず最新バージョンに置き換えてみる方が良いかも。

コメント

トラックバック