M.Hiroi's Home Page

Memorandum

プログラミングに関する覚え書や四方山話です。
[ Home ]
2014年 1月 11月 12月

2014 年 12 月

12月28日

●文字コードの変換

Windows (MS-DOS) の文字コードはデフォルトでシフト JIS ですが、最近は UTF-8 を採用している OS やアプリケーションが多くなってきました。たとえば、Cygwin や Linux は UTF-8 ですし、Go 言語や Scala などのプログラミング言語も UTF-8 を採用しています。シフト JIS で書かれた Windows 用のプログラムを Cygwin や Linux に移植する場合、文字コードの変換が必要になります。

Linux には標準で iconv という文字コードを変換するコマンドが用意されていますが、改行コードの変換は行ってくれません。Windows の場合、改行コードは CR+LF ですが UNIX 系の OS では LF だけです。この場合、コマンド tr で CR を削除すれば Windows の改行文字を UNIX に直すことができます。

あとは、iconv と tr をパイプでつないで、tr の結果をファイルにリダイレクトするだけです。

$ iconv -f SJIS -t UTF-8 file1.txt | tr -d \\r > file2.txt

ただし、この方法はちょっと困ることがあります。アスキーコードのバックスラッシュ (0x5c) はシフト JIS では円記号になりますが、上記の方法では 0x5c を UTF-8 の円記号 (0xa5) に変換します。プログラムの場合、0x5c をエスケープシーケンスなど特別な記号に割り当てていることがほとんどなので、0xa5 に変換されるとプログラムは正常に動作しなくなります。

M.Hiroi は Tcl/Tk ミニゲーム集を Linux に移植するとき、これが原因でプログラムが動作せず、しばらくの間悩んでしまいました。まあ、そのほかにも手直しするところがあったので、けっきょく Emacs で置換 (replace-string) しましたが、もっと簡単な方法がありました。それはコマンド nkf を使うことです。nkf は次のコマンドでインストールすることができます。

sudo apt-get install nkf

nkf の基本的な使用方法を示します。

ntf [option] input_file

-j : JIS に変換
-e : EUC に変換
-s : シフト JIS に変換
-w : UTF-8 に変換

-Lu : 改行コードを LF に変換
-Lm : 改行コードを CR に変換
-Lw : 改行コードを CR+LF に変換

nkf は入力ファイルの文字コードを自動的に判別するので、文字コードの指定は必要ありません。また、-L オプションで改行コードの変換も指定することができます。nkf は古くからある漢字変換プログラムのようですが、今もメンテナンスされていて、とても便利に使うことができます。メンテナンスされている関係者の皆様に感謝いたします。


2014 年 11 月

11月2日

●VirtualBox と Vagrant

以前から仮想マシンで Linux など他の OS を動かすことに興味があったのですが、インストールや設定が面倒なような気がして、なかなか実行に移すことができませんでした。ところが、ドットインストールローカル開発環境の構築 によると、VirtualBoxVagrant を使うと、簡単に仮想マシンで Linux などの OS を動かすことができるようです。

VirtualBox は GNU General Public License で利用できる仮想マシンで、Vagant は仮想マシンに OS のインストールや SSH 接続などの設定を行ってくれるツール (MIT License) です。Vagrant の基本的な使い方はドットインストールの Vagrant 入門 が参考になると思います。

Vagrant は VirtualBox のコマンド (VBoxMange など) を呼び出すので、インストールした VirtulaBox にパスを通すことを忘れないでください。それから、Vagrant は基本的に SSH 接続で仮想マシン上の OS にアクセスするので、SSH クライアントが必要になります。DOS プロンプトで vagrant ssh と入力しても、SSH クライアントがなければ動作しません。M.Hiroi は Cygwin の openssh を使いました。これで DOS プロンプト上で仮想マシンにアクセスすることができます。

実際に試してみたところ、驚くほど簡単に仮想マシン上で Linux の環境を構築することができました。M.Hiroi のパソコンは Windows7 (32 bit) でメモリが 2 GByte しかないので、32 bit OS しか試していませんが、きちんと動作しています。軽量の Linux であれば M.Hiroi の環境でも動作するようなので、今度は Vagrant を使わないで仮想マシンに Linux をインストールして、Linux の環境でプログラミングに挑戦してみようかな、と思っています。


2014 年 1月

1月1日

あけましておめでとうございます

旧年中は大変お世話になりました
本年も M.Hiroi's Home Page をよろしくお願い申し上げます

Copyright (C) 2014 Makoto Hiroi
All rights reserved.

[ Home ]