- 締切済み
文字コード変換プログラムについて
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- taka37777
- ベストアンサー率30% (166/544)
fgetsではなく、fgetcを使っても良いですが、文字コードを変換する際全角文字は2バイトになります。ですから一行単位で読み込むなどしてからiconvを使って変換しないと、文字化けすると思います。 http://www9.plala.or.jp/sgwr-t/lib/fgetc.html
- taka37777
- ベストアンサー率30% (166/544)
Wikiにiconvの説明とサンプルが掲載されているようです。 http://ja.wikipedia.org/wiki/Iconv#.E8.87.AA.E4.BD.9C.E3.83.97.E3.83.AD.E3.82.B0.E3.83.A9.E3.83.A0.E3.81.8B.E3.82.89iconv.E3.83.A9.E3.82.A4.E3.83.96.E3.83.A9.E3.83.AA.E3.82.92.E4.BD.BF.E7.94.A8.E3.81.97.E5.A4.89.E6.8F.9B.E3.81.99.E3.82.8B.E5.A0.B4.E5.90.88
お礼
ありがとうございます。すいません、fgetsではなく、fgetcを使って行いたいのですが、たとえばWIKIのソースをどのように変えればよいのでしょうか? p_src = s_src; p_dst = s_dst; n_src = strlen(s_src); n_dst = S_SIZE-1; while(0 < n_src){ iconv(icd, &p_src, &n_src, &p_dst, &n_dst); } 特にこのあたりをどうにかすればよいのでしょうか?
関連するQ&A
- 大文字を小文字に変換するプログラム
if((fp4 = fopen("sample.txt","r")) == NULL){ printf("can't open\n"); return(-1);//強制終了 } else{ while((c=fgetc(fp4))!=EOF){/*EOFまでfp4に入力*/ if(isupper(c)){ c=tolower(c); printf("%s",c); } else printf("a"); //確認用 } } ファイルから文字を読み込んでctype関数を使って大文字から小文字に変換したいんですがうまくいきません。 コンパイルしても確認用が反応しないんでおそらくどこか間違ってると思うんですがわかりません。 ご教授宜しくお願いします。
- ベストアンサー
- C・C++・C#
- コード変換(漢字)のサンプルプログラム
始めまして! 困っています、御力添えをお願いします。 UNIX(SouOS5.8)でのコード変換(SJIS→EUC、EUC→SJIS)のコーディング(サンプルソース:C言語)をどなたか教えて頂けないでしょうか? お願いします。
- ベストアンサー
- C・C++・C#
- gccでiconvを使った文字コード変換で文字化け?
Linuxでgccを使ってプログラムを作っていますが、文字コード変換が一部分うまくいかなくて困ってます。 Shift-JISで作られたテキストファイルから一行ずつ文字を読み込んで、 それをUTF-8に変換して画面に出力しているんですが、 「神石高原町」だけ文字化けしているのか、表示されません。 前後の行は表示されるのでちょうど1行空白になる感じです。 とりあえず変換用に作った関数。 BOOL SJIStoUTF( char* pin, // (IN) 変換元文字列 char* pout, // (OUT) 変換後文字列格納領域 size_t olen) // (IN) 変換後文字列格納領域サイズ { iconv_t cd; size_t ilen, rlen; cd = iconv_open( "UTF-8", "SJIS-WIN" ); ilen = strlen( pin ); rlen = iconv(cd, &pin, &ilen, &pout, &olen ); if( rlen == -1 ){ printf( "ERROR in S2U (%s)\n", pin ); return FALSE; } *pout = '\0'; iconv_close( cd ); return TRUE; } この関数に「神石高原町」を与えて返ってきた文字をファイルに出力して、 秀丸の文字コードUTF-8で開くと変換できなかった文字が「神」の前にあり、文字も「神石高原」になるし・・・。 Linuxのコンソール上でiconvのコマンド使ってファイルごと変換すれば 文字化けしないんですけど、 gccでiconv使うときは気をつけなきゃだめなことがあるんでしょうか? なんでこうなるのかわかる方がいたら教えてください。
- 締切済み
- C・C++・C#
- 文字コード変換時の文字化けについて
HP-UX上で、文字コードUTF8のファイルをiconvにてSJISに変換して利用しています。 その際、¥(全角円マーク)、―(全角ダッシュ)、‐(全角ハイフン) などが文字化けしてしまいます。 shell内にて処理できればよいので、iconvでなくても結構ですが、文字化けしない方法をご存じ方がいらっしゃれば教えていただけると幸いです。 よろしくおねがいいたします。
- 締切済み
- その他([技術者向] コンピューター)
- ファイルコードの変換の問題
現在、shift-jis ファイルをUTF-8に変換するところです。 使っているソフトはGNU の iconvです。バージョン1.10です。 iconv -f SHIFT_JIS -t UTF-8 a.txt > b.txt で文字コードが変換されていない 詳しい方が教えていただけないでしょうか
- ベストアンサー
- その他(プログラミング・開発)
- 文字コードが変わってしまう
Webページ作成関連の市販のテキストについているサンプルコードを自分のマシンにコピーして勉強しています。WindowsXPとWindows7を使っています。 たとえば、【今日問題なく使った】のに、翌日同じHTMLファイルのソースを見たら、文字コードが矢印に変わってしまっています。 改行コード変換ソフトで変換して、また元に戻して作業をしました。 翌日、他の部屋のマシン(WinXP)でそのファイルを開いたら、また文字コードが矢印に変わっていました。 詳しいことはわからないレベルですが、状況だけ書いてみました。 文字コードが変わってしまうタイミングってあるのでしょうか。関係ないかもしれませんが、書籍についてきたサンプルファイルの文字コードはUTF-8なので、文字コード変換ソフトでShift_JISに変更しました(なぜShift_JISにしたかは、特に意味はありません。UTF8がいいというのは聞いていますが、とりあえずShift_JISでやっています)。 難しい理論は理解できないと思いますが、どうしてそうなるかを教えていただける方がいたらお願いします。
- ベストアンサー
- その他([技術者向] コンピューター)
- 文字コードと小数変換
初歩的な質問かもしれませんが2つほどお願いします。 1.jsファイルの文字コード htmlファイルではheadにシフトJIS指定で記述したのですがjsファイルでは何も指定せずに(指定できるのでしょうか?) 保存したらjsファイルの読み込み時に文字化けしてしまいました。 どちらもWindowsのメモ帳で作成保存したのですがjsファイルの文字コードはどうなるのでしょうか? htmlのほうをEUC指定すると文字化けはおきないのですがフォントがずれるのであまり使いたくありません。 2.小数変換 小数第何位を四捨五入と指定できる関数というのはあるのでしょうか? Math.floorやMath.ceilでは整数値になってしまいます。 10^nで割ってから計算し直さないといけないのでしょうか?
- 締切済み
- JavaScript
- HP-UXでの文字コード変換方法
非常に困ってます。どなたかご存知の方、ご教授下さい。m(_ _)m あるPPが出力するログファイルがあり、そのログには UTF-8とSJISのコードが含まれている事が分かりました。 このファイルをSJISに変換したいのですが、iconvコマンドを使用すると(iconv -f utf8 -t sjis)、UTF-8の 箇所は問題なく、変換できますがSJISが混入している箇所で、エラーとなります。 「上記コマンド例では、"UTF-8"を"SJIS"に変換して!」という意味で、変換元にUTF-8ではない"SJIS"が 入っていると、その箇所で、エラーになるようです。 同一の要件を、Linuxでも実装する必要があります。 Linuxでは、iconv以外にも"kcc"という便利なコマンドが用意されているようで、"kcc -s"と実行すると 元ファイルにUTF-8であろうがSJISであろうが、何のコードが入っていても、自動判別して指定したコードに 変換してくれうようです。 と、いう訳でHP-UXでのコード変換に非常に困っています。どなたか、同じ事で悩まれた経験がある方、 知識豊富で、対象方法をご存知の方、 助けてください。。。m(_ _)m
- 締切済み
- その他(プログラミング・開発)
お礼
ありがとうございます。そうですか・・・、そのような仕組があるのですね ・・。勉強になりました。