• 締切済み

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

jx-wordの回答

  • jx-word
  • ベストアンサー率40% (38/94)
回答No.3

VS2005であればfopenの下記のパラメータ指定でいけるはずです。 fp = fopen("c:/temp/log.txt", "w, ccs=UTF-8"); 詳細はマニュアルのfopenの項を参照してください。

bigbang2010
質問者

お礼

皆様ありがとうございました。 結局、オブジェクトコードがUTF-8にならない限り、出力時のsjis→UTF-8変換が必用になるということですね。 先程exe内でリテラル文字列がsjisになっていることを確認しました。 追加確認結果です。 sjis範囲外のUTF-8(例えば羽かんむりに軍)はVisualStudioのエディタ上では表示されますが、オブジェクトコード上では0x3f(?)になってしまいます。 したがって、sjis→UTF-8変換も出来ないと思われます。0x3fはどう変換しても0x3fですから。

bigbang2010
質問者

補足

ご回答ありがとうございます。 VisualStudio2005+SP1で上記方法を試してみましたが、fprintf()でAssertionとなってしまいました。 『これだ!』と思ったんですけど…

関連するQ&A

  • EmEditorでSJISファイルをUTF-8に

    EmEditorでSJISファイルをUTF-8に変換したいと思い、「名前を付けて保存」でUTF-8を選択して保存しました。 すると、次回開く時に、「指定したエンコードで変換できない文字が含まれています・・・」というポップアップが出てしまいます。 日本語を含む、SJISファイルをUTF-8に変換するにはこの手順だけではいけないのでしょうか? どうぞよろしくお願い致します。

  • ファイルへの書込み処理が異常に遅い

    以下のファイルへの書込みを行なうプログラムの処理速度が極端に遅く困惑しています。 -------------------------------------------------------------------------------- /*  文字列"0,"をファイルに約2MB出力するプログラム  (2000文字で改行、1行毎にfopen&fclose) */ #include<stdio.h> void main( int argc, char *argv[] ) {   FILE *fp;   for( int i = 0; i < 1000; i++ )   {     if( !(fp = fopen( "C:\hogehoge.log", "a" ) ) )     {       exit( 1 );     }     for( int j = 0; j < 1000; i++ )     {       fprintf( fp "0," );     }     fprintf( "\n" );     fclose( fp );   }   exit( 0 ); } -------------------------------------------------------------------------------- 処理時間は5分程度です。 出力する文字列を"0#"に変えると5~6秒で終了します。 カンマが入ると違うのでしょうか? OSはWinXP、コンパイラはVC++7.0です。 原因と解決策をご存知の方、よろしくご教示下さい。

  • MFCのコントロールにUTF-8の文字を表示したい

    MFCのコントロールにUTF-8の文字を表示したい 表題の件ですが、VisualStudio2008において、UTF-8+BOMフォーマットで保存したソースコードにBOMつきUTF-8を入力する方法と、UTF-8文字列をMFCのコントロール(リストコントロールなど)に表示する方法がわかりません。 どなたかご教授いただける方が居られましたら幸いです。

  • エラーが出ます

    12,51,13,123,133,551,… というコンマで区切られているファイルを読み込みたいです。数字は100文字です。どう書けば全部読み込めるでしょうか? よろしくお願いします。 int main(int argc,char *argv[ ]){ int line; int i; FILE *fp; fp = (argc > 1)? fopen(argv[1],"r"): stdin; if(fp==NULL){ perror("fopen"); exit(0); }   while(fscanf(fp,"%d",&line) != EOF){ printf("%d\n") } if(argc>1){ fclose(fp);   }

  • SJISで保存してあるPHPファイルを、UTF-8のBOMなしで保存し

    SJISで保存してあるPHPファイルを、UTF-8のBOMなしで保存しなおす方法を教えてください。 CodeIgniterというフレームワークを使って勉強しています。 これに関する書籍では、『PHPファイルはUTF-8のBOMなしで保存する事』と厳しく書いてあります。 しかし、SJISで保存してあるPHPファイルがあり、秀丸エディタを使いPHPファイルをUTF-8のBOMなしで保存しなおそうとするのですが、上手く行きません。 その所為かどうか分かりませんが、サンプルも上手く動きません。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 出力ページをUTF-8に

    CGIは全くの初心者で、いくつかの配布されたCGIを利用しています。 今回、HTMLファイル、JavaScriptファイル、CSSファイルの全ての文字コードをShift JISからUTF-8に変更しました。 Perlで出力されるページの文字コードもUTF-8にしましたが、CGIの方ではShift JISの指定のままのようです。 出来れば出力されたページもUTF-8のままにしたいのですが、どうすればいいのでしょうか?

    • 締切済み
    • CGI
  • gccによって、BOM付きのUTF-8で出力する

    こんにちは。 gccコマンドは、cygwinに付属していたものを使っています。 fopen関数でファイルを出力用にオープンし、fputs関数などで、何かしらの文字を書き込むCソースファイルを作成したとします。 このCソースファイルから、実行ファイルをビルドする際、 gccコマンドをオプション無しで使って実行ファイルをビルドし、その実行ファイルを実行すると、エンコーディングが"BOM無し"のUTF-8である出力ファイルが作成されます。 ですがこれだと、Emacsなどで開いた時に、バッファのコーディングシステムがraw-textになって、文字がきちんと表示されません。 gccコマンドには、ビルドされた実行ファイルが、エンコーディングが"BOM付き"のUTF-8であるファイルを出力するように指定する、オプションはありますでしょうか? 今回、ググっても1つも手掛かりが見つからなかったので、質問させて頂きましたので、 gccに詳しい方、是非よろしくお願い致します。

  • コマンドラインによるファイル名指定

    #include<stdio.h> #include<stdlib.h> int main(int argc,char *argv[]) { FILE *fp,*fpc; int i=0; char line[1000]; fp = fopen("test.txt","r"); if(fp == NULL) { printf("File not found.\n"); exit(1);  }  fpc = fopen(argv[1],"w"); if(fpc==NULL){ fprintf(stdout,"Can not open file.\n"); exit(1); } while(fgets(line[i],1000,fp)!=NULL){ i++; } for(i=3;i<0;i--){ fprintf(fpc,"%s",line[i]); } fclose(fp); fclose(fpc); return 0; } コマンドラインでファイル名を指定し、そのファイルに、test.txt(4行の文字列)の内容を各行を逆順に書き出すプログラムですが、上手くいきません。ご指摘を願いします。

  • ファイルの出力

    コマンドラインで指定したファイルの内容を一行ずつ表示するプログラムです。一行表示するごとに次の行も表示するか尋ねます。 #include<stdio.h> #include<stdlib.h> #include<ctype.h> int main(int argc, char *argv[]) {  FILE *fp;  char str[80];  char ch;  if (argc != 2){   printf("コマンドライン引数が違います\n");   exit(1);  }  if ((fp = fopen(argv[1],"r")) == NULL){   printf("ファイルが開けません");   exit(1);  }  while(!feof(fp)){   fgets(str, 79, fp);   if (!feof(fp)) printf("%s",str);   printf("追加しますか?(y/n)");   gets(str);   if ( toupper(*str) == 'N') break;   printf("\n");  }     if (fclose(fp) == EOF){   printf("ファイルを閉じれません\n");   exit(1);  }  return 0; } while文の   gets(str);  if ( toupper(*str) == 'N') break; この部分を  ch = getchar();  if ( toupper(ch) == 'N') break; でやると上手く実行できないのですが、なぜでずか?

  • 複数ファイルの出力

    質問があります。1600個のデータを読み込んで(16個ずつの組で100組)、1番目、3番目、5番目、7番目のデータをss[1].txtとして出力し、同様に2番目、4番目、6番目、8番目のデータをsk[1].txt、9番目、11番目、13番目、15番目のデータをks[1].txt、10番目、12番目、14番目、16番目のデータをkk[1].txtとして出力させます。以下、ss[2].txt,sk[2].txt,ks[2].txt,kk[2].txt・・・に関してはそれぞれ直前のファイルに16を足したデータ(例えばss[2].txtなら、17番目、19番目、21番目、23番目のデータを出力)を出力させるというプログラムです。 以下に自分で作ったプログラムを掲載します。 void ecg_rr(fp,data_max) FILE *fp; { int i,j=0; int c=1; char fname[64]; data[0][i]=trend_data[0][i]; for(i,j=0;i<100,j<100;i++,j++) { sprintf(fname,"ss[%d].txt",1+i); fp = fopen(fname,"w"); fprintf(fp,"%4d\n",c); fprintf(fp,"%8.8f\n",data[0][0+j*16]); fprintf(fp,"%8.8f\n",data[0][2+j*16]); fprintf(fp,"%8.8f\n",data[0][4+j*16]); fprintf(fp,"%8.8f\n",data[0][6+j*16]); sprintf(fname,"sk[%d].txt",1+i); fp = fopen(fname,"w"); fprintf(fp,"%4d\n",c); fprintf(fp,"%8.8f\n",data[0][1+j*16]); fprintf(fp,"%8.8f\n",data[0][3+j*16]); fprintf(fp,"%8.8f\n",data[0][5+j*16]); fprintf(fp,"%8.8f\n",data[0][9+j*16]); fclose(fp); /*ks,kkに関しても同様*/ } } これだと100個ずつファイルを出力できるのですが、データが全て0として出力されてしまいます。