• ベストアンサー

Linuxにてテキストファイル出力の文字コード

RedHatLinux7.3(2.96-110)、gccバージョン(2.96 20000731)にて、 C言語のアプリケーションを初めて作成しています。 そのアプリ内でテキストファイル(日本語あり)を 作成するのですが、どうも期待どおりの結果になりません。 というのも、出来上がったファイルの文字コードが、 EUCではなくShift-JISになってしまっています。 Linuxで作成したアプリをLinuxで実行するのですから、 出来上がるファイルの文字コードはEUCになるはずですよね? ちなみに、文字コードの確認は「kcc -c XXXXX.log」でおこないました。 もしかして「アプリケーションログを日本語出力する」 なんていうことが、そもそもの過ちなんでしょうか? ファイル出力には、fopen+fprintfを使っています。 どうしてこのような結果になってしまうのか、ご存知のかた、よろしくお願いします。

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

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

リダイレクトしたファイルがEUCになっているかどうか以下の方法で確認してみてください。 コンソールの場合は、まず、konと入力し、漢字が表示できるようにしてください。その後で、 1.emacs ファイル名  と入力し、漢字が表示されると、左下にEEEが表示されれば EUC、EESの場合はシフトJISです。 2.cat ファイル名 で正しく漢字が表示されれば、EUCです。

secma
質問者

補足

回答ありがとうございました。 emacsでは-S、catでは文字化けした状態でした。これはやっぱりShiftJISですね。 でも、今やっと、うまくいきました! 結論から言いますと、ソースファイルのいくつかが正常にEUC変換できていなかったみたいです。 すべてのソースファイルのEUC変換をやり直して実行してみましたら、ログファイルは正常にEUCで出力されているようです。 emacsで-E、catで正常に表示されていますので間違いないですよね? 本当にいろいろありがとうございました。

その他の回答 (3)

  • mid2k
  • ベストアンサー率50% (2/4)
回答No.4

nkf のバグというか文字コードの欠陥なんですが シフトJISのX0201仮名とEUCが判別できない事があります。 なので入力が必ず シフトJIS と分かっている場合は nkf -S -e xxx.c > yyy.c としてみたら如何でしょうか。 また、FTP クライアントにも文字コード変換機能くらい 付いているのが普通だと思います 一部ファイルは EUC で一部ファイルが シフトJIS のような 混乱を避けるためにも、 FTP クライアントでアップする際に 一緒に変換するのが無難だと思います。

secma
質問者

補足

回答ありがとうございます。 nkfのヘルプを見直しました。そういうオプションがあったなんて、ぜんぜん気づきませんでした。 また、FTPソフトも設定を見直そうと思います。

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

nkfを使用したそうですが、nkf -e xxx.c と入力しただけでは、xxx.cはEUCコードに変換されません。 nkf -e xxx.c > yyy.cと入力してください。 yyy.cがEUCコードに変換されたファイルです。

secma
質問者

補足

回答ありがとうございます。 さきほどの補足にて記述が不足しておりました。 ご指摘のとおり、「nkf -e xxx.c > yyy.c」でリダイレクトはしてあります。すみませんでした。(+_+) EUC変換に失敗しているのかしら・・・?でも失敗してたらリダイレクト結果も文字化けしてますよね。

  • onosuke
  • ベストアンサー率67% (310/456)
回答No.1

その日本語の出所はどこなんでしょう? 出所に問題有りです。 ソースコード中? (ソースの文字コード確認) 外から読み取る? (読み取り元データの文字コード確認) fprintfの%sは'\0'で文字列終端を探知するのみ。 それ以外は何も考えません。

secma
質問者

補足

回答ありがとございます。 えぇっと、Windowsでソースを作成してLinuxにFTPして、「nkf -e」でEUCに変換しましたのでEUCのつもりです。 このままではEUCに変換なってないんでしょうか?(-_-;) またよろしくお願いします。

関連するQ&A