• ベストアンサー

異なるOSのファイルがなぜ読めるの?

UNIXのWEBサーバーにWINDOWSで作ったCSVファイルをアップしました。UNIXとWINDOWS、ファイルシステムは違ってもファイルそのものは変わらないものなのでしょうか。 アップしたCSVファイルをUNIXもWINDOWSも同じ中身のデータとして理解できているのでしょうか。分からなくなってしまいました。

質問者が選んだベストアンサー

  • ベストアンサー
  • chie65536
  • ベストアンサー率41% (2512/6032)
回答No.5

可読文字(目に見える文字)は、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バイト違う)

___xxx
質問者

お礼

ありがとうございました。

その他の回答 (4)

  • galoon
  • ベストアンサー率28% (38/133)
回答No.4

表現語彙が乏しくうまく伝わるかわかりませんがご了承ください。 ファイルシステムの違いは、ファイルの管理方式、ファイルの保存方式が違うことを指します。 そこで、FTPなどの転送を行うとFTPサーバーソフトがその違いを考慮して受け取ったファイルを受け取り側のファイルシステムに準拠した保存をして受け取り側で受け取ったデータを利用できるようにしているわけです。 つまり本当に異なるファイルシステムのデータをそのまま無加工で移動してきても移動先のファイルシステムでは読み取れなくなります。

  • jayoosan
  • ベストアンサー率28% (929/3259)
回答No.3

CSVファイルはテキストファイルで、データ部分をUNIXもWindows解読できます。 改行のコード(キャラクター)がUNIXとWinでは違ったり、日本語の部分も文字コードがEUCコードとShift-JISコードなどの違いがあった場合、表示がうまくいかないことがあります。 最近のソフトは、そのどちらにも対応しているものが増えているので、コード体系が違っていても、UNIXでもWinでも同じように開けるケースが多くなりました。 両方のコードに対応できるソフトではない場合、どちらかで文字化けや改行の位置がかわります。

回答No.2

UNIXとWINDOWSが、共通の規格でCSVファイルを作成しているからです。 データというのは全て0と1の集合体です。 それを、例えば「0001」は「a」という文字、 「0002」は「b」という文字、 「0003」は「c」という文字・・・とルールを決め、 UNIXもWINDOWSもそのルールに則ってデータを解釈しています。 なので、UNIXからWINDOWSにデータの0と1の並びをコピーすれば、 同じ内容のデータとして理解することが出来ています。 「文字化け」というのが保存する時と読む時とで異なるルールを使ってしまう事で発生します。 ↑のルールで「abc」と打ち、「000100020003」と保存されている物を、 「0001」を「あ」、「0002」を「い」、「0003」を「う」と読むルールで解釈してしまうと、 「abc」のはずが「あいう」に・・といった感じです。

___xxx
質問者

お礼

ありがとうございました。

  • sanakazu
  • ベストアンサー率18% (43/230)
回答No.1

csvファイルがテキスト形式(アスキーファイル)だからでは?

関連するQ&A