• ベストアンサー

printfで全角カタカナが文字化け?

C言語において、printf関数をつかって全角カタカナを表示しようとすると、文字化けが発生します。 puts関数を使うと文字化けは発生しないので、使用上は特に問題は無いのですが、原因は何でしょうか?文字コードに起因するものでしょうか? ちなみに、OSはRedHatLinux9を使用しています。 宜しければ、回答お願い致します。

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

  • ベストアンサー
  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.4

#2です。 文字コードがJISですので、これをEUCに変換すれば、あなたの望んだ結果が得られます。 コマンドライン上で nkf -e  ソースファイル1 > ソースファイル2 と入力してください。 ソースファイル1は、あなたが作成したソースファイルです。これはJISコードになっています。ソースファイル2がEUCコードに変換されたファイルです。ソースファイル2をコンパイルすると、正しい結果が得られます。 尚、emacsの左下のところにエディット中のファイルの漢字コードが表示されるはずです。ソースファイル1の場合はEEJ、ソースファイル2の場合は、EEEと表示されるはずです。

linuxbeginner
質問者

お礼

返事ありがとうございます。 >> nkf -e  ソースファイル1 > ソースファイル2 このコマンドを実行したあと再コンパイルしてみると、正常に表示されました。EUCに変更できるコマンドがあるんですね。是非、覚えておきます。 >>尚、emacsの左下のところにエディット中のファイの >>漢字コードが表示されるはずです。ソースファイル >>1の場合はEEJ、ソースファイル2の場合は、EEEと >>表示されるはずです。 この点に関しては、私の環境では、ソースファイル1に関しては、-Jと表示され、ソースファイル2に関しては、 -Eと表示されます。が、特に問題は無いようです。 ご回答ありがとうございました。

linuxbeginner
質問者

補足

あと、便乗質問で申し訳ないのですが、デフォルトの漢字コードをiso-2022-jpからEUCに変更するにはどのようにしたらいいかご存じでしょうか?ご存じでしたら、手順を教えて頂きたいのですが、宜しくお願いします。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (5)

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.6

#4です。 >あと、便乗質問で申し訳ないのですが、デフォルトの漢字コードをiso-2022-jpからEUCに変更するにはどのようにしたらいいかご存じでしょうか?ご存じでしたら、手順を教えて頂きたいのですが、宜しくお願いします。 本件、私も多少このことを調査したのですが、残念ながら判りませんでした。 この件は、カテゴリをUnix系OSに変えて、質問すると良い回答が得られるかも知れません。 尚、直接の回答にはなりませんが、emacsはソースが既にEUCコードの漢字を含んでいれば、EUCコードで入力できるようになりますので、新規のプログラムを作る場合でも、前のソース(EUC漢字を含んだ)をコピーして、作るようにすれば、EUCコードでの入力ができるようになります。

linuxbeginner
質問者

お礼

何度も丁寧な回答ありがとうございます。 >>この件は、カテゴリをUnix系OSに変えて、質問する >>と良い回答が得られるかも知れません。 そうですね。そうしてみます。 >>尚、直接の回答にはなりませんが、emacsはソースがに >>EUCコードの漢字を含んでいれば、EUCコードで入力で >>きるようになりますので、新規のプログラムを作る場 >>合でも、前のソース(EUC漢字を含んだ)をコピーし >>て、作るようにすれば、EUCコードでの入力ができるに >>なります。 なるほど、このやり方もありますね。変更の仕方が分かるまではこのやり方を使うことにします。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • notnot
  • ベストアンサー率47% (4859/10276)
回答No.5

#3です。 >そうだったんんですね。てっきり、printf("データ")のように書くのが普通だと思っていました。 「あんまりごく普通ではありません。」と書きましたが、ちょっと誤解をまねくというかまずい表現でした。 JISでソースを書くのが意図的なら、#3で書いた方法を取るのが普通だと思いますが、1引数だけのprintfが普通でないとは思いません。 シフトJISやJIS(ISO-2022-JP等)をプログラム中で文字列として使うにはいろいろ制約(シフトJISだと\が含まれるとか)があるので、かなり意識してプログラムを書く必要があります。 JISコードである必然性が無いなら#4の書かれたようにEUC-JPにするのが楽です。プログラムの出力がJISである必要があるなら、ソースはEUC-JPで書いておいて program | nkf -j で、JISに変換することも出来ますからね。

linuxbeginner
質問者

お礼

何度も丁寧な回答ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。
  • notnot
  • ベストアンサー率47% (4859/10276)
回答No.3

>printf("データ"); のようにごく普通に文字列を並べたものであっても文字化けがします。 あんまりごく普通ではありません。 >文字コードは調べてみたところ、iso-2022-jpというものでした。 iso-2022-jpでの"データ"は、printf の書式制御文字である % を含んでますので、printf の第一パラメータに指定してはいけません。 printf("%s","データ");とか、fputs("データ",stdout); ではどうでしょうか? "データ"に限らず、EUC-JP以外の漢字コードの文字列をprintfの第一パラメータに書かないほうがいいでしょう。fprintfの第二パラメータ等も同じ。

linuxbeginner
質問者

お礼

返事ありがとうございます。 >>iso-2022-jpでの"データ"は、printf の書式制御文で >>ある % を含んでますので、printf の第一パラメーに >>指定してはいけません。 そうだったんんですね。てっきり、printf("データ")のように書くのが普通だと思っていました。 >>printf("%s","データ");とか、fputs("データ >>",stdout); ではどうでしょうか? このようにすると、正常に表示されました。 >>"データ"に限らず、EUC-JP以外の漢字コードの文列 >>をprintfの第一パラメータに書かないほうがいいで >>しょう。fprintfの第二パラメータ等も同じ。 そうですね。次回からは気をつけたいと思います。 ご回答いただきありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.2

想像する文字コードの問題だと思われます。 EUCコードがデフォルトの文字コードであると言う前提で、 データと書いたのが、SJISかJISになっています。 この「データ」の全角カナ文字は、どのようにして作成されましたでしょうか。 端末でエディタで、直接作成した場合は、その漢字コードが何になっているか調べてください。この方法が判らないときは、エディタは何を使用しているか、提示してください。 又、このソースをWindowsで書いてLinuxにアップロードしているのでしたら、その時の漢字コードの指定は何にしているのか提示してください。

linuxbeginner
質問者

補足

返事ありがとうございます。 「データ」という文字は、Emacsにて作成しました。 文字コードは調べてみたところ、iso-2022-jpというものでした。 宜しくお願い致します。

全文を見る
すると、全ての回答が全文表示されます。
  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

printf("%c", 'ア'); こんなコードで出してるとか。 最低限printfで問題が出ている個所のソースがないと。

linuxbeginner
質問者

お礼

返事ありがとうございます。

linuxbeginner
質問者

補足

説明不足で申し訳ございませんでした。 printf("データ"); のようにごく普通に文字列を並べたものであっても文字化けがします。この場合は、文字化けで・抗検璽・・と表示されます。 宜しくお願い致します。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 全角ダッシュの文字化け

    文字コードはぜんぜん詳しくないですが、 あと一息のところで困ってます。 全角ダッシュの文字化けについてはなかなか参考になるものが少なく、 どなたかご教授いただけないでしょうか? 宜しくお願いします。

    • 締切済み
    • PHP
  • printfのコードは?

    C言語において、 printf等の標準関数もC言語で書かれていると聞きましたが、そのコードそのものを見ることが出来るのでしょうか? ご存知の方、よろしくお願いいたします。

  • 文字化けを治す方法ありますか?

    いつも大変お世話になりありがとうございます。 C言語・インタープリターを実行した時に文字化けします。 改善策をアドバイス願います。 ご多忙中恐れ入ります。 ご回答の程、宜しくお願い申し上げます。 コード /*画面に文字を出力するコード*/ #include <stdio.h> int main(void) { printf("ようこそC言語へ!\n"); printf("C言語をはじめましょう!\n"); return 0; } コンパイルと実行時の文字化け。 C:\MinGW>gcc Sample1.c -o Sample1 C:\MinGW>Sample1 繧医≧縺薙◎C險€隱槭∈・・ C險€隱槭r縺ッ縺倥a縺セ縺励g縺・シ・

  • CGI(Perl)の文字化けについて

    WEBフォームからの入力データをHTMLに加工して表示するというシンプルなCGIプログラムなのですが、 全角スペースの後に全角カタカナが入ると、全角スペースの部分から後が文字化けしてしまいます。 他はきちんと表示されているのですが、全角スペースとカタカナが続いているのが良くないみたいで、文字化けしてしまうようです。 全角スペースを取ってしまえばいいのかと思い、WEBで検索して色々と試してみましたが、変わりません。。 このような場合はどういう対処をするのが一番いいのでしょうか。 文字コードはEUCを使っています。(WEBフォーム、CGIとも) 教えてください。よろしくお願いいたします。

    • ベストアンサー
    • CGI
  • データをカタカナで入れる場合、全角のほうが良い?

    htmlでHPを作る際は、カタカナは全角にしないと文字化けするので全角にするようにしていますが、 accessのテーブルのレコードに入れるデータも、やはり全角で入れたほうがいいのでしょうか? 半角だと文字化けを起こしますか? 本当は、モニタの画面が小さいので、半角で入れて目いっぱい表示できるようにしたいのですが 文字化けしたりエラーになったりするのなら、データは全角で入れようと思います。

  • 全角文字を PDFで変換できません。(文字化けしてしまいます。)

    全角文字をPDFで変換しようとしても、文字化けしてしまいます。 LabEditorで入力したいかなる全角文字も、PDFでは「・・・」で出力されてしまいます。 また、HPからダウンロードしたファイルも、全角文字は同じように文字化けして出力されます。 使用環境は、OSはWindows XP、Acrobat Professinal 6,0です。 解決策を教えていただきたいと思います。 よろしくお願いします。

  • VBで全角文字の上位コードを取得するには?

    今までC言語で以下のようなソースで動いていたプログラムがあります。 int main(void) {  FILE *fp1;  char str1[]="ABCあ"; char str2[]="XXX";  fp1 = fopen("aaaa.txt", "w");  fprintf(fp1, "%-4.4s%3s\n",str1,str2);  fclose(fp1); } 上のプログラムの実行結果は「ABC9XX」になります。 これは、printf関数で変数str1の4文字目が全角文字の「あ」であるのに %-4.4sが指定されているため、「あ」の上位コードと str2の1文字目のXの文字コードが連結されてしまい、 文字化けしてしまっているようです。 「ABCあ」の文字コード A=41H, B=42H, C=43H, あ=82H,AOH 「XXX」の文字コード X=58H, X=58H, X=58H 出力結果 ABC9XXの文字コード A=41H, B=42H, C=43H, 9=82H,58H, X=58H X=58H 今回このプログラムをVBに置き換えることになったのですが、 出力されるデータは今までプログラムとまるで同じにしてほしい (つまり、今まで文字化けしてるところは 文字化けした形で出力してほしい)の依頼があったため、 Format関数やLeftB関数を使って なんとかプログラムを書いてみたのですが、 うまく動作しません。 うまい対処法があれば教えてください。 宜しくお願いします。

  • phpMyAdmin、インポートで全角カナ文字化け

    レンタルサーバでphpMyAdminもレンタルしています。 csvファイルをインポートしているのですが、 どうやらちょっとずつ文字化けしているようです。 やっと分かったのは 【1】 「ソ」が「ャ」になり、「ソ」以降のカタカナが文字化けしています。 (ソがない場合は、上記ソ以降の文字はきちんと表示されます) また、「予感」という字も「頼ェ」になっていました。 (テーブル数が少ない場合、上記の文字化けは起こりませんでした  また、phpMyAdmin上で入力すると、きちんと表示されます) 【2】 また、データに「─」や「圭」が入っていると、「CSV 入力のフィールド数が不正です」 というエラーが発生します。 【3】 こちらは、phpで作ったフリーワード検索ですが、 POST送信した際、「メ」→「ƒ」、「ー」→「[」と変換されます。 インポートするカタカナは、全角カタカナしか使っていません。 ───────────────────── MySQL: サーバのバージョン: 5.0.77-log プロトコルバージョン: 10 MySQL の文字セット: UTF-8 Unicode (utf8) Web サーバ Apache MySQL クライアントのバージョン: 5.0.45 PHP 拡張: mysqli phpMyAdmin:バージョン 3.2.4-rc1 ───────────────────── 文字コードはシフト-jisに統一しています。 (色々試しましたが、UTF・EUCでは、インポートした時点で主に「????」の文字化けが発生) 本当に行き詰ってしまい、テーブルデータなどを全て消して1から作り直したのですが…同じでした。 データ数が大変多いので、文字化けしているところを1つずつ直すというのはできません。 初歩的なミスなのかもしれませんが、思い当たらず質問をさせていただきました。 どなたかご存じの方がいらっしゃいましたら、ご教授お願い致します。

    • ベストアンサー
    • MySQL
  • printf()関数の第一引数の文字列のアドレスを知りたいんですが。

    C言語を色々試して実験中です。 たとえば、 printf("あなたは100歳です\n");  という文をprintf関数で出力するとすると、この文字列定数「あなたは100歳です」のアドレスを調べたいんです。調べる事はできますか?よろしくお願いしますm(_ _)m

  • 文字化け

    C言語初心者です。 #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { printf("表示"); system("PAUSE"); return 0; } と書いてコンパイルしたのですが「表示」のところが文字化けしてしまいます。 他にも文字化けするかもしれないので、 解決法を教えて下さい。 使っているコンパイラは、Bloodshed Dev-C++です。

このQ&Aのポイント
  • コンピューターにapi-ms-win-crt-string-l1-1-0.dllがないため、プログラムを開始できません、というエラーが表示されます。
  • このエラーは、必要なDLLファイルが見つからないためにプログラムが開始できないという意味です。
  • 解決するためには、api-ms-win-crt-string-l1-1-0.dllファイルをコンピューターにインストールする必要があります。
回答を見る