ある一覧の文字コード変換にnkfを使用しているのですが、特定の行のみで変換がうまくいきません。
さらに言えば、nkfで全体を一発で変換した場合のみ当該行の変換がうまくいかず。単発で当該行のみをnkfで変換すれば問題なく変換が出来てしまいます。
正直原因を掴みかねており、勘所ある方いらっしゃいましたら、アドバイス宜しくお願いいたします。
http://www.linuxworld.jp/command/-/10370.html
LinuxWorld Online - 第22回 文字コードと改行コードを変換する
当てずっぽうで申し訳ありません。
引っかかっているデータがないし、何から何への変換で失敗しているかわからないので何とも言えませんが、当該行の前の行末の改行コードが悪さをしているのではないでしょうか?
例えば試しに改行コードだけ先に変換してみるとか?
http://homepage2.nifty.com/cs/linux_command/command/od.html
$BF|7P(JLinux(B (J[Linux$B%3%^%s%I=8(J](B (Jod(B (J:(B $B%P%$%J%j!&%U%!%$%k$NFbMF$r1\Mw$9$k(J
またはその行末に何かゴミ(表示されないデータ)がついている可能性も否定できないので当該行近辺の中身を見てみたほうがいいかもしれません。
http://jp.analog.cx/ml/archive/200204.month/1132.html
Article 1132 at 02/04/05 16:57:21 From: turutani@scphys.kyoto-u.ac.jp Subject: [analog-jp:01132] Re: URL-decode $B$9$kJ}K!(B
うまくいかない部分は文字コードがほかの行と違うのではないでしょうか?
nkfは何もオプションを与えないと、元の文字コードを自動判別します。この自動判別は、入力中に複数の文字コードが混在している場合でも、それぞれを自動的に判断して適切な変換を行おうとします。ただ、文字コードの異なる部分が短い場合など、自動での判別が難しいものがあります。そうなると、その部分の判定に失敗し、結果として文字化けとなります。
http://www.linux24.com/linux/allascii/linuxmag/2001/06/18/626705...
コマンドによっては数多くのオプションを持つ。このリファレンスを参考にしよう。
nkfに-Eや-S、-Jなどのオプションをつけると、入力をそれぞれEUC, S-JIS, JISに決め打ちして変換します。-Eをつけてうまく変換できれば、EUC, というようにもとの文字コードを推定できます。
どれかのオプションで正しく変換できれば、元の文字コードは統一されているが、nkfの自動判別がそれを誤解していることになります。この場合は自動判別を行わないようnkfに正しく変換できるオプションをつけて実行すればよいです。
どれをつけてもうまくいかない部分がある場合、文字コードが混在しています。
入力の文字コードを統一してもらうか、
文字コードが異なる場所を特定し、個別にnkfをかける
などの対応が必要になります。
http://www01.tcp-ip.or.jp/~furukawa/nkf_utf8/
UTF-8 $BBP1~(B nkf (nkf_utf8)
前述のどのオプションでもだめな場合はunicodeの可能性もあります。
当該行のみ文字コードが異なる可能性ですか・・・。確かにあり得なくない話です。
ご回答ありがとうございます。
改行コードかゴミが怪しいということですか。。。
ちょっと継続して調べてみます。