UTF-8でファイルを保存できないエラーが出る理由

このQ&Aのポイント
  • MFCでUTF-8でファイルを保存しようとしていますが、エラーが出ています。
  • Windows8とVisual Studio 2012を使用しています。
  • 参考にしたHPによると、MFCで文字セットをマルチバイト文字セットにしています。
回答を見る
  • ベストアンサー

MFCで、UTF-8で保存したい

すいません。 またまた教えて下さい。 MFCで、UTF-8でファイルを保存しようとしていますが、うまくいきません。 下記のプログラムで、添付のエラーが出ます。 // UTF-8ファイル書き込み FILE* pFile1; fopen_s(&pFile1,"C:\\app\\8a.txt", "w, ccs=UTF-8"); //fopen_s(&pFile1,"C:\\app\\8a.txt", "w"); //UTF-8でないのでOK if (pFile1) { CStdioFile file(pFile1); file.WriteString(_T("abcあいうえお")); file.Close(); } <環境> windows8 visual studio2012(2008でも同じでした) MFCで、文字セットはマルチバイト文字セットを使用するにしています。 参考にしたHP http://faithandbrave.hateblo.jp/entry/20080724/1216890457 なぜでしょうか? よろしくお願い致します。

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

  • ベストアンサー
  • bull1472
  • ベストアンサー率66% (2/3)
回答No.1

マルチバイト文字セットではだめみたいですね。 Unicode文字セットすれはできると思いますが、 マルチバイト文字セットである必要があれば CStdioFileを使用せずに、stdioのfputws() などを使用するしかないでしょう。

rechirin
質問者

お礼

下記のようにして解決しました。 ご助言ありがとうございました。 wchar_t strt[] = (L"Testあいうえお"); FILE* pFile1; fopen_s(&pFile1,_T("C:\\test.txt"), _T("w, ccs=UTF-8")); ::fputws(strt,pFile1); ::fclose(pFile1);

関連するQ&A

  • UTF-8での保存について

     エディットボックスに入力してある日本語の文字列をUTF-8やUTF-8Nでテキストファイルに保存したのですがうまくいきません。  UTF-8の場合はファイルの先頭に3バイトのBOMをつければいいらしいので、 ファイルの先頭に0xEF,0xBB,0xBFの3バイトを追加してテキストファイルに保存しましたがメモ帳で開くと文字化けします(メモ帳で開くときは文字コードをUTF-8にして開いてます)。 作成したテキストファイルをバイナリエディタで開いてみると先頭の3バイトはEFBBBFとなっているので何も問題はないと思うのですが、どうして文字化けするファイルができてしまうのでしょうか? --- 実行環境 --- Microsoft Visual C++ 2010 Express WIN32 ユニコードビルド C言語

  • VC++2005 型変換

    テキストファイルを開いて、そのファイルの中身をfgetsで読みながらそれを何回か繰り返すというようなことをするというプログラムを書いてます。プログラムは下になります。 int m; FILE* pFile; char buffer[128]; pFile=fopen("p1.txt","r"); pFile=textBox1->Text; if (pFile==NULL) { label1->Text="ファイルがありません。\n"; } for(m=1; m<=8; m++) { fgets(buffer,128,pFile); String^ buffer; buffer=textBox2->Text; } } デバックを行うと次のエラーが出てしまいます。 error C2440: '=' : 'System::String ^' から 'FILE *' に変換できません。 どのように直せばよいのでしょうか?

  • Python の utf16le デコードが化ける。

    Python2.5で日本語を扱おうと試みています。 utf16le で書かれた "名" という文字を他の文字コードに変換しようとすると、なぜか"吊"に化けるという現象に悩んでいます。 他の文字ではこのような現象は見ていないのですが、何か使い方を間違っているのでしょうか? ちなみに、コンソールでは例えばna.txt の内容が "名"1文字として、 import codecs utf16_file = codecs.open('na.txt', 'r', 'utf_16_le') print utf16_file.readline() とすると"吊"が表示されてしまいます・・・。 どなたか原因に心当たりがあったら教えてください。m(_ _)m

  • プラスが文字化け

    開発環境 ・Windows XP (32bit) ・Visual C++ 2005 ・マルチバイト文字セット CStdioFileクラスを使用してのファイル出力で、 以下のような処理を実行したところ文字化けしてしまいました。 文字化けを回避するにはどうすれば良いでしょうか? アドバイスお願いします。 CStdioFile file(_T("C:\\XXX\\YYY.txt"), CFile::modeCreate | CFile::modeWrite); // "+"の後ろが数値となる文字列 CString str(_T("0.000e+000")); file.Write(str, str.GetLength()); ↑の実行結果をエディタで開くと"0.000eMモ"となってしまいます。

  • Powershell ではUTF8出力を表示できない?

    Powershell でnkfが使えないとわかりました。 http://d.hatena.ne.jp/sirocco/20090511/1242070398 UTF8絡みはDOS窓でやるしかないのでしょうか? (ファイルに限った話ではなく、パイプ入力で) utf8.txt これはUTF-8ファイルです。 Powershell> type utf8.txt | nkf -s ?????UTF-8?????????????? cmd.exe> type utf8.txt | nkf -s これはUTF-8ファイルです。 Powershell 1.0 ローカライズ版 Windows XP SP-3

  • VC++でUTF-8のファイルを出力したい

    VisualStudio2005で以下のコードを実行したとき、ファイルをUTF-8で作成したいのですが、なにか方法がありますか? 現状では、SJISで出力されてしまいます。 ソースは、『ファイル』-『保存オプションの詳細設定』で『UTF-8(BOM付き)』にしてあります。 #include <stdio.h> int main(int argc, char* argv[]) {     FILE *fp;     fp = fopen( "c:/temp/log.txt", "w");     fprintf( fp, "%s\n", "あいうえお" );     fclose( fp );     return 0; } ちなみに、”あいうえお”の部分を(EmEditorで)SJISに無くてUTF-8にだけ存在する文字にした場合、VisualStudioのエディタ上では正しく文字が表示されます。 したがって、VisualStudio内ではリテラルの文字コードはUTF-8で扱われていると考えられます。・・・が、上記プログラムで出力すると文字化けします。つまり、SJISで出力されてしまいます。 ご教授のほど、よろしくお願いいたします。

  • iframeでutf-8の.txtを呼び出す。

    HTMLのIframeで、文字コードがUTF-8であるテキストファイル(.txt)を呼び出す。(文字化け?) HTMLのIframeで、文字コードがUTF-8であるテキストファイル(.txt)を呼び出す時に、 内容が文字化けするので困っています。 表記に間違いがあるかもしれませんが、宜しくお願いします>< あと一応確認しましたが万が一既出でしたら申し訳ありません。 <iframe src=~>では、拡張子.htmlのファイルに加えて.txtファイルも呼び出せます。 .htmlファイルの場合、METAタグを使い、内側のHTML内で文字コードを指定しておけば 文字化けは起きないのですが、 txtファイルではそのような指定ができません。 外側(iframeを記述する方)から内側(src=~の呼び出し先)に向かって文字コードを 指定するのは可能ですか? 又はその他によい方法がありますか・・・?? 宜しくお願いしますm(_ _)m

    • ベストアンサー
    • HTML
  • 標準出力をDOS窓を開かずにファイルに書き込む方法

    VC++(Console Appli)です。 あるコマンドの標準出力結果をファイルに吐き出す方法として、 単純には、 system("cmnd > C:\\temp.txt"); とやれば実現できますが、このとき、一瞬ですが、DOS窓の黒枠が表示されます。 このDOS窓を出さないで済む方法があれば教えてください。 標準出力を何らかの方法で受け取って、 ------------------------------------------------- CString str; CStdioFile file;   :  cmndの標準出力結果をstrへ内部的に受け取らせる。   : file.Open(_T("c:\\temp.txt"), CFile::modeWrite); file.WriteString(str); file.Close(); ------------------------------------------------- などで簡単に出来れば良いのですが・・よろしくお願いします。

  • fgets で値が取得できない

    fopen , fgets に関して質問させてください。 現在「readme」というファイルを UTF-8 にて開こうとしております。 fopen でファイルは開けているようなのですが、fgets を呼び出した際に以下の様なメッセージが出て異常終了してしまいます。 『Microsoft Visual Studio C ランタイム ライブラリは Sample.exe に致命的なエラーを検出しました。 [中断] をクリックしてプログラムをデバッグするか、または [続行] をクリックしてプログラムを終了してください。』 UTF-8 を指定しない場合は上手く動いているようです。 UTF-8 の時は特殊な取り出し方をしなければならないのでしょうか? Visual C++ 2008 Express Edhition の デバックモードで動かしています。 ****************************** 1 : FILE *file1; 2 : char s[256]; 3 : 4 : file1 = fopen( "C:\\readme", "r, ccs=UTF-8"); 5 : while (fgets(s, 256, file1) != NULL) 6 : { 7 : printf("%s", s); 8 : } ******************************

  • ファイル読み込みについて

    ファイル読み込みについてなのですが、 文字コードがUNICODEの場合は出来たのですが、 UTF-8の場合、正しく読み込めないようなのですが、 何か原因があるのでしょうか? ちなみに、読み込むファイルの文字コードはUTF-8にしています。 _wfopen_s(&fp, file_name, L"rt,ccs=UTF-8")でファイルを開いて、 fgetwcで読み込んでいるのですが、正しく読み込めません。 ちなみに、アクセス許可の種類をL"r"にしたら読み込めました。 原因(これが原因かもしれないでも構いません)とどのようにすればいいかを 教えて頂ければと思っています。 開発環境は、XP、Visual C++ 2010 Expressです。