- ベストアンサー
Linuxにてテキストファイル出力の文字コード
RedHatLinux7.3(2.96-110)、gccバージョン(2.96 20000731)にて、 C言語のアプリケーションを初めて作成しています。 そのアプリ内でテキストファイル(日本語あり)を 作成するのですが、どうも期待どおりの結果になりません。 というのも、出来上がったファイルの文字コードが、 EUCではなくShift-JISになってしまっています。 Linuxで作成したアプリをLinuxで実行するのですから、 出来上がるファイルの文字コードはEUCになるはずですよね? ちなみに、文字コードの確認は「kcc -c XXXXX.log」でおこないました。 もしかして「アプリケーションログを日本語出力する」 なんていうことが、そもそもの過ちなんでしょうか? ファイル出力には、fopen+fprintfを使っています。 どうしてこのような結果になってしまうのか、ご存知のかた、よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
リダイレクトしたファイルがEUCになっているかどうか以下の方法で確認してみてください。 コンソールの場合は、まず、konと入力し、漢字が表示できるようにしてください。その後で、 1.emacs ファイル名 と入力し、漢字が表示されると、左下にEEEが表示されれば EUC、EESの場合はシフトJISです。 2.cat ファイル名 で正しく漢字が表示されれば、EUCです。
その他の回答 (3)
- mid2k
- ベストアンサー率50% (2/4)
nkf のバグというか文字コードの欠陥なんですが シフトJISのX0201仮名とEUCが判別できない事があります。 なので入力が必ず シフトJIS と分かっている場合は nkf -S -e xxx.c > yyy.c としてみたら如何でしょうか。 また、FTP クライアントにも文字コード変換機能くらい 付いているのが普通だと思います 一部ファイルは EUC で一部ファイルが シフトJIS のような 混乱を避けるためにも、 FTP クライアントでアップする際に 一緒に変換するのが無難だと思います。
補足
回答ありがとうございます。 nkfのヘルプを見直しました。そういうオプションがあったなんて、ぜんぜん気づきませんでした。 また、FTPソフトも設定を見直そうと思います。
- tatsu99
- ベストアンサー率52% (391/751)
nkfを使用したそうですが、nkf -e xxx.c と入力しただけでは、xxx.cはEUCコードに変換されません。 nkf -e xxx.c > yyy.cと入力してください。 yyy.cがEUCコードに変換されたファイルです。
補足
回答ありがとうございます。 さきほどの補足にて記述が不足しておりました。 ご指摘のとおり、「nkf -e xxx.c > yyy.c」でリダイレクトはしてあります。すみませんでした。(+_+) EUC変換に失敗しているのかしら・・・?でも失敗してたらリダイレクト結果も文字化けしてますよね。
- onosuke
- ベストアンサー率67% (310/456)
その日本語の出所はどこなんでしょう? 出所に問題有りです。 ソースコード中? (ソースの文字コード確認) 外から読み取る? (読み取り元データの文字コード確認) fprintfの%sは'\0'で文字列終端を探知するのみ。 それ以外は何も考えません。
補足
回答ありがとございます。 えぇっと、Windowsでソースを作成してLinuxにFTPして、「nkf -e」でEUCに変換しましたのでEUCのつもりです。 このままではEUCに変換なってないんでしょうか?(-_-;) またよろしくお願いします。
補足
回答ありがとうございました。 emacsでは-S、catでは文字化けした状態でした。これはやっぱりShiftJISですね。 でも、今やっと、うまくいきました! 結論から言いますと、ソースファイルのいくつかが正常にEUC変換できていなかったみたいです。 すべてのソースファイルのEUC変換をやり直して実行してみましたら、ログファイルは正常にEUCで出力されているようです。 emacsで-E、catで正常に表示されていますので間違いないですよね? 本当にいろいろありがとうございました。