• ベストアンサー

fgetsでcsvファイルを読み込めなくなる!?

fgetsでcsvファイルを読み込めなくなる!? Cを使って、csvをfgetsで読み込むプログラムを作っています。 実際に製作し、csvファイルを(A.csvとします)読み込むことができました。 しかしデスクトップ上で 「新規作成」 →「txtファイルを作成」 →「拡張子を.csvにし、csvファイル(B.csv)を作成」 →「Aの中身をコピーし、Bにペースト」 を行い、B.csvを読み込もうとすると、 読み込むことができません(正確には文字化けした、単語が数文字表示される) これは何が原因なのでしょうか? ご教授お願いいたします。

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

  • ベストアンサー
回答No.3

『fgets()で読み込む』ということなので、プログラムで使用している文字コードはShiftJISでしょう。 csvファイルを何を使って編集しているかわかりませんが、 Windows標準のメモ帳で編集してみてはどうですか? 「ファイル」「名前を付けて保存」を選択すると表示されるダイアログボックスに、 [文字コード]を選択する欄が表示されます。 ここで「ANSI」を選択(XPの場合)して保存すれば、ShiftJISで保存されます。

kumakuman3
質問者

お礼

無事解決しました!! ありがとうございます。

その他の回答 (2)

  • SaKaKashi
  • ベストアンサー率24% (755/3136)
回答No.2

文字コードがUTFなのでBOMと呼ばれるUTFの文字コードをしめすコードがファイルの先頭に記述されているのです。 UTFコードに対応したテキストエディタならBOMの有無に対応しています。 一度、テキストエディタでファイルを開いて、BOMなしで保存するか、文字コードをシフトJISにして保存してみてください。

kumakuman3
質問者

お礼

ご回答ありがとうございます。 あまりこういうことには詳しくなくて。。 具体的にどうすればよいのでしょうか? 何度も質問して申し訳ありません。

回答No.1

どう文字化けしてるのか分からないので何とも言えませんが、 A.csvとB.csvとでは文字コードが違っているのかと…… 例えばB.csvがUTF16で保存されていて、プログラムがANSI文字にしか対応していないと文字化けが起こります。また、ASCII文字はUTF16では上位バイトに00が詰められるので、ANSI系の文字列処理では文字列の終端と見なされてしまいます。fgetsも途中で読み込みが終わります。

kumakuman3
質問者

お礼

回答ありがとうございます。 CSVファイル内には 2行*4000列の数字データがあります。 それを読み込むと ミマ爍ア と表示され、プログラムがエラーを起こします。 magicalpassさんのおっしゃることが原因で あるとするならば、どのような対処をすれば よいのでしょうか?

関連するQ&A