nkf だけで、URIエンコードされた文字を扱える
とある文字列を処理していて、CP932(Shift_JIS ) がそのまま、URLエンコードされた文字に出会って、ちょっと面倒な自体になった 。 node の decodeURI/decodeURIComponent だとUTF-8を期待されて動かない。ruby/pythonだと内部文字コード*1から変換が面倒くさい。nkf で文字コードを変換を調べてたら、 nkf だけで行けることがわかった。
NKF で URL をデコードする
$ echo %E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF%EF%BC%81 | nkf --url-input こんにちは!
--url-input
オプションを使えば、デコード出来る
デコード結果をさらに utf8にするには -W
オプションをつけておけばいい。nkf --url-input -W
NKF でURLをエンコードする。
takuya@:~$ echo こんにちは! | nkf -MQ | sed s/=/%/g %E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF%EF%BC%81
-MQ
オプションはQuoted stream に変換するので、 =
を使ってる。それを%に変換すればいい
CP932(MSP92/Shift-JIS) の%エンコードの文字コードを扱うには
組合せて使います。
echo %82%B1%82%F1%82%C9%82%BF%82%CD | nkf -w --url-input こんにちは
nkf 便利。
NKFは枯れた技術だし安心して使えるわ。Windowsの文字コードがutf8にならねーかなぁ
関連資料
文字コード変換コマンドの nkfの使い方と実例をまとめました。 - それマグで!
参考資料
- man nkf