それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

nkfでURLエンコードされた文字を扱える(エンコード・デコード・文字コード)

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の使い方と実例をまとめました。 - それマグで!

参考資料

*1:ruby の場合内部文字コードはないんだけど、utf-8がデフォルト仕様なので、やっぱり面倒くさい