- 締切済み
VC++でUTF-8のファイルを出力したい
jx-wordの回答
- jx-word
- ベストアンサー率40% (38/94)
再回答で。 よく見たらソース全体がUnicode用になってないですよね、これ。 int main(int argc, char* argv[]) ↓ int _tmain(int argc, _TCHAR* argv[]) fp = fopen( "c:/temp/log.txt", "w"); ↓ fp = _tfopen( _T( "c:/temp/log.txt" ), _T( "w, ccs=UTF-8" ) ); fprintf( fp, "%s\n", "あいうえお" ); ↓ _tfopen( fp, _T( "%s\n" ), _T( "あいうえお" ) ); _UNICODEを定義する。 tchar.hをインクルードする。 などの変更が必要です。 詳細はマニュアルの「Unicode プログラミングの要約」辺りを参照してください。
関連する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です。 原因と解決策をご存知の方、よろしくご教示下さい。
- 締切済み
- C・C++・C#
- MFCのコントロールにUTF-8の文字を表示したい
MFCのコントロールにUTF-8の文字を表示したい 表題の件ですが、VisualStudio2008において、UTF-8+BOMフォーマットで保存したソースコードにBOMつきUTF-8を入力する方法と、UTF-8文字列をMFCのコントロール(リストコントロールなど)に表示する方法がわかりません。 どなたかご教授いただける方が居られましたら幸いです。
- ベストアンサー
- C・C++・C#
- エラーが出ます
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); }
- 締切済み
- C・C++・C#
- 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に詳しい方、是非よろしくお願い致します。
- ベストアンサー
- C・C++・C#
- コマンドラインによるファイル名指定
#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行の文字列)の内容を各行を逆順に書き出すプログラムですが、上手くいきません。ご指摘を願いします。
- ベストアンサー
- C・C++・C#
- ファイルの出力
コマンドラインで指定したファイルの内容を一行ずつ表示するプログラムです。一行表示するごとに次の行も表示するか尋ねます。 #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; でやると上手く実行できないのですが、なぜでずか?
- ベストアンサー
- C・C++・C#
- 複数ファイルの出力
質問があります。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として出力されてしまいます。
- 締切済み
- C・C++・C#
お礼
お礼が遅れて申し訳ありません。 現在別件作業中で、この問題は別担当者に任せていました。 現在の解決策としては、リテラル文字列使用時にsjis→UTF-8変換して動かしている状態です。 ご回答いただいた件、調査してみます。コンパイラオプションではなく、_UNICODEを定義することによってオブジェクトがUTF-8になる…ということ?ですかね。このようなことは、コンパイルオプションでやるものだとばかり思っていました。 色々な流れで、今回のコードはワンソースでWinとLINUX両方で動かす可能性が大です。したがって、Win独自のコーディングが出来ない(部分的なifdefはありますが)可能性大です。ご回答いただいた件がgcc(g++)で可能なのか合わせて調べてみたいと思います。 Win環境だけでの文字コード関係なしプログラミング…勉強不足を痛感です。