nkf、全角「-」が化ける

nkfを通すと、どういうわけか全角のマイナス(ハイフン?)が文字化けする。文字コード変換をしなくても化ける。

実験用に用意したのは「-」だけが入ったファイル。UTF-8の環境で作ったもの。

16進ダンプ。

これをnkfを通す。出力文字コードはUTF-8。つまり、コード変換はなし。

なんで?

iconvならこんなことは起きない。

化けていない。


最初にこれに気づいたのは、CP932なファイルをnkfで変換したとき。「-」が化けるので、CP932からUTF-8への変換で何か問題があるのかなと。でも、追っかけてみたらUTF-8からUTF-8への変換(=無変換)でも起きることがわかった。ここは、iconvを使うことにするか。


これはまた別の問題。

文字コードの話。まず、ざっくり、CP932はShift_JISを拡張したもの。 なので、大半は同じ。まずはこれが今回の話のベース...

【追記】

MS-UnicodeとIBM-Unicodeの違いであると教えてもらった。

そんな物があるとはつゆ知らず…。検索したら、このページが見つかった。

ということで、改めてnkfのmanを見るとこういうオプションがあった。

--no-best-fit-chars
   Unicode からの変換の際に、往復安全性が確保されない文字の変換を行いません。
   Unicode からUnicode の変換の際に -x と共に指定すると、nkf を UTF 形式の
   変換に用いることができます。 (逆に言えば、これを指定しないと一部の文字が
   保存されません)

   パスに関わる文字列を変換する際には、このオプションを指定することを強く推奨
   します。

なるほど。この –no-best-fit-chars オプションを使えばいいのか。

この記事のタイトルとURLをコピーする
スポンサーリンク
スポンサーリンク
スポンサーリンク