質問: UNIXのWEBサーバーにWINDOWSで作ったCSVファイルをアップしました。UNIXとWINDOWS、ファイルシステムは違ってもファイルそのものは変わらないものなのでしょうか。 アップしたCSVファイルをUNIXもWINDOWSも同じ中身のデータとして理解できているのでしょうか。分からなくなってしまいました。
回答: 可読文字(目に見える文字)は、OSが違っても「同じ文字」として定義してある為、CSVなど「可読文字で構成されたファイル」は(ちょっとした変換をすれば)共有できます。 但し、漢字などの多バイトコード文字は、内部表現がOSごとに違う場合がある為に「漢字コードの変換」を行う必要がある場合があります。 (この辺りは「nkf」について調べてみると良いでしょう) で、問題なのは改行コードなどの「非可読文字」です。 Windowsでは、改行コードは「CR」「LF」の2文字が使われます。(「復帰」「改行」の2文字) 一方、UNIXでは、改行コードは「LF」の1文字が使われます。(「改行」の1文字) WindowsからUNIXにファイルを移す場合、邪魔になる「CR」を削らないと、UNIXは「行末に変な文字があるぞ」と、誤動作してしまいます。 逆にUNIXからWindowsに移す場合、足りない「CR」を「LF」の前に足さないと、Windowsは「改行が無く、全部1行に繋がってるぞ」と、これも誤動作してしまいます。 その為、ファイル転送などを行う際は、この辺りを細工して(変換して)転送しなければなりません。 代表的なファイル転送プロトコルに「ftp」と言うのがありますが、UNIXのWEBサーバーにCSVファイルをアップした時もこのftpを使用した筈です。 実は、ftpには、ファイルを転送する際に「転送モード」に「ASCIIモード」か「BINARYモード」のどちらかを設定するようになっていて、「ASCIIモード」を選ぶと、前述の改行コードの変換を自動で行ってくれます。 Windows上にあるCSVファイルと、UNIX上に転送したCSVファイルのサイズを、バイト単位で見比べてみて下さい。改行コードが違うので、ファイルの行数と同じだけファイルサイズが違う筈です。(25行のテキストファイルなら、サイズが25バイト違う)