トップページ | 利用規定
  改行コード/漢字コードについて

(株)友林堂
(株)友林堂


OSによって、ファイル内に書かれたテキスト1行1行の最後を示す改行コード (リターンを押した時に記録されるコード)が異なります。

OS名改行コード名
WINDOWS
CR(\r)+LF(\n)
MAC
CR(\r)
UNIX
LF(\n)

従って、それぞれのOSで編集されたテキストファイルを他のOSで認識させるには、 そのOSに合った改行コードに変換しなければなりません。 CGIスクリプトを設置するために大変重要な要件なので、よく理解してください。


どうやって変換するの?

当サイトで解説する際に、「アスキーモード」「バイナリモード」という言葉がよく出てきます。 これは何を意味するのかをまず把握してください。

バイナリモードとは、RAW(生)データ、すなわち、 そのファイルの改行コードを含めてそのままの状態で転送するモードを言います。 画像やコンパイルされたプログラムなどはこのモードを使います。

私はファイル編集にWINDOWSを使っています。 そこで編集されたファイルをUNIXサーバへ転送するわけです。 ここで、WINDOWS→UNIXへの改行コード変換が必要になります。 WINDOWSユーザは大変多いですし、利用しているWEBサーバもUNIXで動作しているところが多いですので、 ほとんどの方が私と同じ状況にあたると思います。そんなこともあってか、 一般的に、WINDOWS上で動くFTPソフトは、WINDOWS上のファイルをUNIX上へ転送することを前提に設計されており、 FTPソフトでのファイルのやり取りで「アスキーモード」を指定すると、この改行コード変換が自動で行われます。

希にWINDOWS-NTサーバもありますが、当サーバではUNIX用のプログラムを提供していますので、 プロバイダで採用しているのがWINDOWS-NTサーバの方は、そのソフトがNTサーバに対応しているかどうかは わかりませんし、当サイト提供のプログラムもそのままでは動作できません。

従って、当サイトで「アスキーモード」で転送することを指示している場合、 「WINDOWS上で動く一般的なFTPソフトを利用して、WINDOWSで編集したファイルをUNIXで認識できる改行コードへ自動変換して転送する」ことを意味します。

ここで注意することは、「自動変換」とは、FTPソフトについているファイルの自動認識機能のことではありません。 改行コードを変換しながら転送してくれることであって、 ファイルの拡張子によってそのファイルをどちらのモードで転送するかを自動判別する機能と間違わないでください。 ファイル転送するときは、できるだけ自分で転送モードを指定して行ってください。 一般的に、*.txtや*.htmlなどがアスキー転送に設定されており、自分でその設定をしない限り、 *.cgiがアスキー転送ファイルとして設定されていなければ、自動判別にしておくとバイナリモードで転送されてしまいます。



正式にはどう処理するの?

私もいままで、アスキーモードを指定すると、改行コードに関係なくファイル転送が行えると勘違いしていました。 そこで、「アスキーモード」でと指示してきましたが、それがどういう処理をすることなのかを把握しておかないと、 その他の環境の方(特にMAC!)やデータの書き換えなどの際にトラブルが生じてしまいます。 当サイトの説明文をすべて書き換える手間が非常に大変なので、いままでの記述を変更するつもりはありません。 そこでこのページを作成し、必ず一度は見て理解しておいていただくようにしたのです。

正しくは、ファイル転送時に注意することは、 「転送先のOSの改行コードにあらかじめ変換したファイルをバイナリモードで転送する」ということなのです。

私はMACのことはよくわかりませんが、MACの方はパソコン上でUNIX用の改行コードに変換保存できるソフトを用い、 よく利用されている「fetch」というFTPソフトで「RAWDATA」を選択して転送することで、 当サイトで言うところの「アスキーモードで転送」と同じ操作ができることになります。 さらにMACの場合は「ISOトランスファ」のチェックを外してください。

秀丸エディタ(インターネットマガジン等の雑誌のCD-ROMに添付されているシェアウエア)などの、 ファイル保存時に改行コードや後述する漢字コードを選択できるエディタを使って、 改行コードをUNIXで使われるLFに設定して保存すれば、そのファイルはそのままUNIXで認識できるファイルとなります。 従って、既に改行コードはUNIX用になっていますので、改行コードを含めてそのまま転送する「バイナリモード」で転送します。

要するに、どの時点で改行コードを変換するかによって転送モードが異なるのです。 私はこのような改行コードを変換するソフトやエディタを持っていません。 というのも、私はWINDOWS上のメモ帳(notepad.exe)で作成したファイル(SJISになる)を、 UNIX用のFTPソフトを使ってアスキーモードで転送していたために、 このような細かい知識も理論も知る必要もなくCGIスクリプトを設計&設置できた経緯があります。 余談ですが、私の場合できるだけソフトに依存しないでおこなうことにすることで、特にHTMLを覚えようとしてきました。 普通のエディタで自分の力だけで書かないと、 HTMLエディタや自動HTML作成ソフトを使うとHTMLは自分のものになりません。


■漢字コードについて

一般的に、UNIXで利用する漢字コードはEUCです。 しかし、私のようにWINDOWSを利用しているユーザにとってEUCを扱うのは非常に不便です。 WINDOWS上ではSJISが使われています。そこで、当サイトのスクリプトは、特に指定が無い限り、 SJISで作成しており、SJISのまま設置することで動作するように設計しています。

しかし、SJISで設置することによって様々な弊害があります。 これは、処理上、メタ文字(特殊文字)とSJISのコードが一部合致してしまう文字があるためです。 さらに、マッチ処理をする際には致命的なエラーが発生してしまいますので、 マッチ処理にかける前にEUC変換するなど、時間のかかる処理をしなければなりません。

文字化けになった方のほとんどが、設置時にSJIS以外の漢字コードで設置しているようです。 上記の秀丸エディタ等の、保存時に漢字コードも変換できるソフトで、 知らず知らずにSJIS以外のコードで保存してしまっていることがよくあります。 ブラウザの表示文字コードを自動以外に設定し、ブラウザで表示した時に化けない設定が何かを確認することによって、 現在の漢字コードを知ることができます。

スクリプトをEUCに変換して設置することが一番確実ですが、 スクリプト中の漢字コード変換部分の設定を書き換える必要もあります。 この程度であればある程度の勉強でいじることはできます。


以上のことを十分理解して、当サイトのスクリプトをご利用ください。


Powered by CGI RESCUE(R)