- ベストアンサー
UTF-8のファイル読み込みについての問題
- UNICODEの場合は正しく読み込めるが、UTF-8の場合は読み込めない。
- ファイルの文字コードをUTF-8に設定しているが、正しく読み込めない。
- 開発環境はXP、Visual C++ 2010 Express。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
こんな感じで r でも rt でも普通に読み込めていますが…… そもそも _set_fmode() を明示的に呼び出さない限り、既定で r モードと rt モードは同じのはず。 // .cpp 拡張子で保存して C++ モードでコンパイルしてください。 #include <cstdio> #include <locale> #include <conio.h> void main() { _wsetlocale(LC_ALL, L""); FILE* fp = NULL; #if 1 // BOM 無し UTF-8 const errno_t er = _wfopen_s(&fp, L"utf8_test.txt", L"rt,ccs=utf-8"); #else // BOM 付き(先頭に+3バイト) const errno_t er = _wfopen_s(&fp, L"utf8_bom_test.txt", L"rt,ccs=utf-8"); #endif if (er == 0 && fp) { wint_t ch = 0; while (WEOF != (ch = fgetwc(fp))) { putwchar(ch); } fclose(fp); } _putws(L"Press any key to exit..."); _getch(); } ・テキスト ファイル作成に使用したソフト(テキスト エディタなど)は何ですか? ・テキスト ファイルは UTF-8 フォーマットで正しく保存されていますか? ・テキスト ファイルの内容はどのようなものですか? ・0x0D (CR) のような制御コードが混ざっていませんか? 開示されている情報が少ないと、回答者も推測しづらいです。
お礼
回答ありがとうございます。 出来ました。 原因は、文字コード変換ソフトでした。 Visual C++ 2010で作成したソースコードのファイルをUnicodeやUTF-8などに ソフトを使って変換していたのですが、そのソフトに原因があったようです。 メモ帳でUTF-8に保存し直してから試してみたらうまくいきました。 Unicodeで問題なかったのでUTF-8でも問題ないだろうと思ってしまいました。 でも、エディタ(サクラエディタ)では問題なく開けているので、 少し疑問が残りますが。 一応多くのファイルで試しておきたかったのですが、 1つ1つのファイルをUTF-8などに保存し直すのは時間がかかるので、 変換ソフトを使いました。 rモードとrtモードは_set_fmode()を呼び出さない限り意味が無いんですね。 ネットで色々調べていたらrtと書いてあるサイトもあったので、 rモードとrtモードどちらも試していて、rtモードで試している時に 質問させて頂いたのでrtのままでした。 まだ、細かい確認はしていないのですが、今の所ちゃんと読み込めているので、 一応締め切らせて頂きました。 回答ありがとうございました。