綾小路龍之介の素人思考

[Cygwin] Cygwinっていいですね

Linuxでネットに出る時、ネットサーフィンする時、w3mをつかう。やっぱり、ネットに書き込みする時とか最高なんだよね。w3mはtextareaに書き込むときvimを起動してくれる。これが最高たる所以だ。いつも使っているエディタを使えること、Windowsには無いところだよな。そりゃあWindowsにもtextareaの内容をエディタに移して、エディタで編集して、保存して終了すると、内容がtextareaに書き戻される、ということをやってくれるソフトがある。でも、その機能のためだけに導入するとか面倒だし、ぼくがいつも使なれてるOperaだとできないと思った。Linuxではブラウザ関係はOperaとdilloとw3mを装備して、それぞれに使い分けている。こういうことがWindowsでもできれば最高だ。ということで、Windowsでw3mが使えてvimが使えて日本語入力ができる、という条件を満足する何か。Cygwinである。

w3m、vim、screen、rxvt、opensshは必要。これらのうち、rxvt以外は最新版をインストールしてもよさそう。rxvtだけはcygwin JEの物を使う。

[setup.exe] ネットワークインストールプログラムのダウンロードから導入まで

http://www.cygwin.com/から最新のsetup.exeをダウンロードする。で、起動。パッケージを選択する前に、パッケージを配布しているサイトを選択するところがある。そこに、http://cygwin-je.sourceforge.jpを追加して、これとこれ以外のどれか1つたとえばhttp://ftp.jaist.ac.jpをCtrlキーを押しながら選択して、次に進む。パッケージ選択場面では最低限のパッケージが選択されているので、極力余分な事はしない。でも、rxvtだけは導入しておく。ただし、最新版ではなくパッケージ名にjが入ったものを選択しておく。

[vim]

.bashrcに次の内容を追加するか、コメントアウトされていたならコメントアウトを外す

export LANG=ja_JP.SJIS
export TZ=JST-9
export JLESSCHARSET=japanese-sjis
alias ls='ls --show-control-chars'

.inputrcに次の内容を追加するか、コメントアウトされていたならコメントアウトを外す

set meta-flag on
set convert-meta off
set output-meta on
set kanji-code sjis

.vimrcに次の内容を追加するか、コメントアウトされていたならコメントアウトを外す

set encoding=japan
set fileencodings=iso-2002-jp,utf-8,euc-jp,cp932

[w3m]

特にしたことは無かったと思う。

[rxvt]

次のようにして起動、とここまで書いて気づいた。こぴぺできねぇ。だめじゃん。ということで中途半端に終了。やっぱりputtyでSSHで家サーバに行った方が早いということに気づいてしまった。ガーン。

とおもったらできた。Shift+Insで出来た。ついでに続きをコピペしておこう。起動は下のような感じ。

C:\cygwin\bin\rxvt.exe -fg white -bg black -fn msgothic-16 -fm msgothic-16 -km sjis -e ./bash.exe --login -i

[ssh] VineSSHサーバにつなぎにいくと文字化け

前提として、クライアント側の設定をメモっておこう。CygwinのOpenSSH、Cygwin JEのrxvtを使った。まずは文字化けを気にしないでVineにつなぎにいく。

hoge@cygwin$ ssh hage@vine

認証が終わって、プロンプトが表示されたらSSHサーバが送ってくる文字のコードを確認する。

hage@vine$ env | grep LANG

出力の結果を見て、eucJPだとわかる。サーバの送ってくる文字をクライアントが受け取って、クライアントが画面に表示するまでに、正しく文字コードの認識が行われないことで、文字化けが起きる。LANGの確認が終わったらログアウトしておく。

hage@vine$ exit

クライアント側の設定を行う。クライアントはサーバからデータを受け取るが、データを区別して受け取るわけではない。あくまで、人間様が表示された内容を見て、これは「あ」で、これは「い」だと区別しているわけだ。だから、受け取ったデータの文字コードを正しく判別してデータを正しい文字コードで表示しなければいけない。

いま、サーバが送り出すデータの文字コードがわかったので、つぎはクライアントが受け取ったデータを表示する文字コードの確認を行う。この2つの文字コードが異なっていると文字化けする。

hoge@cygwin$ env | grep LANG

今度は、SJISだった。SSHサーバがSSHクライアントに送り出すデータの文字コードと(SSHクライアントが仮想ターミナルに送り出すデータ、この間に文字コード変換は行われない)、仮想ターミナルが人間に送り出すデータの文字コードが違っていたため、文字化けが起きたことになる。

どこかの過程で、正しく文字コードの変換を行うか、送出側の文字コードをSJISにするか、表示側の文字コードをEUCJPにするか、すればOKである。ここでは、文字コードの変換をおこなうことにする。その理由は、送出側の文字コードや表示側の文字コードを変えることは、たとえば、新規作成ファイルの文字コードを変えてしまったり、日本語ファイルのファイル名の文字コードを変えてしまったり、する可能性があるからだ。

では接続してみようと思う

hoge@cygwin$ ssh hage@vine | nkf --sjis -u

こうすることで、SSHクライアントは受け取ったデータを仮想ターミナルに渡す前に、nkfに渡す。nkfは受け取ったデータの文字コードをsjisに変換して仮想ターミナルに渡すので、仮想ターミナルは受け取ったデータをsjisと思って表示し、人間はこれを理解できる。こいういう寸法だ。

+------------+
| SSH Server |-----+
+------------+     |
                 +-------------------+
                 |  euc decoded data |
                 +-------------------+
                   |
+------------------|-------+
|                  |       |
|            +-----------+ |
| SSH Criant | Do nothig | |
|            +-----------+ |
|                  |       |
+------------------|-------+
                   |
                 +-------------------+
                 |  euc decoded data |
                 +-------------------+
                   |
+------------------|-------+
|                  |       |
|            +-----------+ |
| nkf        | Convert   | |
|            | euc->sjis | |
|            +-----------+ |
|                  |       |
+------------------|-------+
                   |
                 +-------------------+
                 | sjis decoded data |
                 +-------------------+
                   |
+------------------|-------+
|                  |       |
|            +-----------+ |
| Terminal   | Translate | |
|            | data->font| |
|            +-----------+ |
|                  |       |
+------------------|-------+
                   |
                 +-------------------------+
                 | Human recognizable font |
                 +-------------------------+
                   |
+------------+     |
| Human      |-----+
+------------+

ソーシャルブックマーク

  1. はてなブックマーク
  2. Google Bookmarks
  3. del.icio.us

ChangeLog

  1. Posted: 2006-12-28T10:35:31+09:00
  2. Modified: 2006-12-28T13:31:17+09:00
  3. Generated: 2017-06-16T23:09:16+09:00