- ベストアンサー
fgetsでcsvファイルを読み込めなくなる!?
fgetsでcsvファイルを読み込めなくなる!? Cを使って、csvをfgetsで読み込むプログラムを作っています。 実際に製作し、csvファイルを(A.csvとします)読み込むことができました。 しかしデスクトップ上で 「新規作成」 →「txtファイルを作成」 →「拡張子を.csvにし、csvファイル(B.csv)を作成」 →「Aの中身をコピーし、Bにペースト」 を行い、B.csvを読み込もうとすると、 読み込むことができません(正確には文字化けした、単語が数文字表示される) これは何が原因なのでしょうか? ご教授お願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
『fgets()で読み込む』ということなので、プログラムで使用している文字コードはShiftJISでしょう。 csvファイルを何を使って編集しているかわかりませんが、 Windows標準のメモ帳で編集してみてはどうですか? 「ファイル」「名前を付けて保存」を選択すると表示されるダイアログボックスに、 [文字コード]を選択する欄が表示されます。 ここで「ANSI」を選択(XPの場合)して保存すれば、ShiftJISで保存されます。
その他の回答 (2)
- SaKaKashi
- ベストアンサー率24% (755/3136)
文字コードがUTFなのでBOMと呼ばれるUTFの文字コードをしめすコードがファイルの先頭に記述されているのです。 UTFコードに対応したテキストエディタならBOMの有無に対応しています。 一度、テキストエディタでファイルを開いて、BOMなしで保存するか、文字コードをシフトJISにして保存してみてください。
お礼
ご回答ありがとうございます。 あまりこういうことには詳しくなくて。。 具体的にどうすればよいのでしょうか? 何度も質問して申し訳ありません。
- magicalpass
- ベストアンサー率58% (378/648)
どう文字化けしてるのか分からないので何とも言えませんが、 A.csvとB.csvとでは文字コードが違っているのかと…… 例えばB.csvがUTF16で保存されていて、プログラムがANSI文字にしか対応していないと文字化けが起こります。また、ASCII文字はUTF16では上位バイトに00が詰められるので、ANSI系の文字列処理では文字列の終端と見なされてしまいます。fgetsも途中で読み込みが終わります。
お礼
回答ありがとうございます。 CSVファイル内には 2行*4000列の数字データがあります。 それを読み込むと ミマ爍ア と表示され、プログラムがエラーを起こします。 magicalpassさんのおっしゃることが原因で あるとするならば、どのような対処をすれば よいのでしょうか?
お礼
無事解決しました!! ありがとうございます。