• ベストアンサー

異なる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

  • Perl はOSによって動作が違ったりするのか?

    お世話になります。 PerlでCGIを作成しようと思うのですが、Webサーバ側の環境がWindows2000、Linux、UNIXなど、OSによって動作が違ったりするのでしょうか? と、いいますのも、WebサーバはUNIXでSun ONE WebServerなのですが、 PerlのプログラミングはWindowsで、テストは、Windows 2000+ApacheまたはIISなどでしようと考えています。 Windowsの環境で作成、テストしたPerlプログラムを、 UNIXのSun ONE WebServerにアップした際、 不具合なく動作するかどうかが心配なのです。 以上、ご教授よろしくお願いします。

    • ベストアンサー
    • Perl
  • CSVファイルのダウンロード

    UNIXのWebサーバにCSVをアップロードしてあるのですがそのCSVファイルのアクセス権を644でブラウザからはダウンロードされない方法はありますか?644の場合『読み取り』が許可されてしまうので無理でしょうか?

  • UNIX-OS環境下でExcelを使いたい

    UNIX-OS環境下でExcelを使いたいのですが、不可能ですか? あるいは、UNIX-OS環境下で作成されたデータをWindows環境下のエクセルに持ってくる方法はありますか? (CSV形式でデータをUNIX環境からWindows環境へ書き出してくるしかないでしょうか?)

  • 社内LANにてWebサーバからファイルサーバにアクセス

    社内LANにて、Webサーバから(apacheを経由して)ファイルサーバにアクセスしたいのですが、どのようにしたら可能でしょうか? WebサーバはUnix系apacheまたはwindows、ファイルサーバはwindowsです。 Webサーバで、”または”と書いているのは両パターンにて、どのようにすれば可能か知りたいため”または”としていますが、Unix系優先で知りたいです。

  • 一台のPCで複数OSを使用する開発環境を作りたい!

    どうもはじめまして! 仕事上毎回のごとくDBサーバ、APサーバ等複数のサーバを使用して開発を行っているのですが、やはり開発経験がまだまだ未熟なので深夜残業が続いて困っています。 そこでスキルアップのため家でも仕事をこなしていきたいと思っています。 質問:  クライアントPCはWindows、サーバはUnix系(毎回変わるのでとりあえず)を1台のPCで実現したいのですが一番よい方法は何でしょうか? やはりVMWareならぬものを使用するのが良いのでしょうか? 極端に言えばWindows側のWEBシステムにアクセスし、WEBシステム側がUnix系で構築されたDBサーバへアクセスできればいいなと思っております。 ご指導ご鞭撻の程よろしくお願いいたします。

  • タブ区切りのテキストファイルをCSVに変換する

    仕事でシステムにファイルを読み込ませるために利用します。 取得できるファイルはタブ区切りのテキストファイルです。 システムが取り込めるデータは、CSVファイルです。(ゆうパックプリント) システムに取り込む為に、取得したタブ区切りのテキストファイルを、一度CSVに変換する必要があるようです。この場合どのような方法で変換が可能でしょうか? タブ区切りのテキストファイル→CSVファイルに変換 をドラッグで簡単にできるようなアプリがあれば、是非紹介して頂きたいです。 パソコンはWindows8 , Mac OS X とありますが、システムはWindows用のシステムの為、出来ればWindowsのアプリがあると助かります。 よろしくお願いします。

  • サーバの中のファイルの安全性について

    お世話になります。 サーバの中のファイルについてなのですが、 会社のホームページでは、入力フォームから登録された方のデータが 自動的にファイル(CSV)に記録されるようになっております。 FFFTPでサーバに接続すると、 ・WEB ・DATA ・LOG 等表示され、DATAフォルダの中にあるCSVデータに記録されます。 ホームページは、WEBフォルダの中に入っております。 外部からは、WEBフォルダしかアクセスできないという風な説明を 受けたのですが、CSVの個人データは結構な量になっており、 流出のことを考えると心配です。 本当に外部からWEBフォルダより上層のフォルダにはアクセスできない のでしょうか。 レンタルサーバ・独自ドメインです。(詳しくはわかりません。) HP制作は単発で頼んだものですので、アフターフォローはありません。 お教えいただけるとありがたいです。 よろしくお願いいたします。

  • FILE権限ない場合のファイルの入出力方法は?

    エックスサーバーを借りているのですが、FILE権限がありませんでした。 GRANTで権限を付与しようとしてもエラーとなり付与できませんでした。 OUTFILEでCSVファイルを出力できないのですが、レンタルサーバーでデータベースをファイルで入出力するには一般的にどのような方法でやるのでしょうか? dumpではなく、Webサービスを利用するユーザーにデータベースのデータをcsvファイルとして出力したいのです。 どうぞよろしくお願い致します。

    • ベストアンサー
    • MySQL
  • Windowsサーバ+Perl +アプリ実行は可能?

    Perlでコマンドを実行したいとき、 Linux/Unixサーバのなら system("コマンド名"); と、できるはずですが、 Windowsサーバ+Perlの場合、サーバにインストールされている プログラム/アプリケーションを実行したりすることは可能でしょうか。 具体的なイメージは ユーザーがブラウザからアクセスすると CGIは、サーバ側にインストールされているExcelを起動して マクロを実行、データをCSV形式ファイルに保存。 CGIは保存したCSV形式のファイルを展開し ブラウザ上で表示。 ということは可能ですか? もし可能ならPerlの書式を教えていただければ うれしいですー。

    • ベストアンサー
    • CGI
  • ファイルのダウンロード

    小生それ程Perlに精通しておりませんので、あんまり難しいコードは理解できません。この間、ひーひー言いながら、このサイトのお力も借り、HTMLフォームからデータエントリするとWebサーバー上のテキストファイルでのデータベースに追加されていくシステムを作ることができました。そこでWebサーバー上にある、テキストファイルをローカルコンピュータにダウンロードするPerlのプログラムコードを知りたいのです。 お力添え宜しくお願いします。

    • ベストアンサー
    • Perl