はじめに
日本語URLを変換する手順は以下記事で説明しました。
ところが上記は文字コードがUTFという前提にたっていました。
「Hatena Keyword」のURLにて変換を実施した際にEUC-JPでエンコードされていることが原因でうまく動かなかったので別途本記事を執筆します。
WmQで変換できない
以下はハテナキーワードです。
話題のキーワードをみんなで解説する無料のWeb百科事典、とのことです。
例えば「はてなブログ」で引いてみると
http://d.hatena.ne.jp/keyword/%A4%CF%A4%C6%A4%CA%A5%D6%A5%ED%A5%B0
上記URLで検索結果が表示されます。
%A4%CF%A4%C6%A4%CA%A5%D6%A5%ED%A5%B0
部分が「はてなブログ」の日本語URLです。
試しに上部に貼った記事に従って-WmQ
オプションで変換すると空行となってしまいます。
$ echo "%A4%CF%A4%C6%A4%CA%A5%D6%A5%ED%A5%B0" | tr % = | nkf -WmQ
原因はEUC-JP
結論から言えば、上記の記事では「W」オプションを利用していますがそれはUTF-8という前提にたっています。
一方で今回はEUC-JP形式でした。
以下、nkfコマンドのマニュアル抜粋です。
- J ISO-2022-JP (JIS code).
- S Shift_JIS and JIS X 0201 kana. EUC-JP is recognized as X0201 kana. Without -x flag, JIS X 0201 Katakana (a.k.a.halfwidth kana) is converted into JIS X 0208. If you use Windows, see Windows-31J (CP932).
- E EUC-JP.
- W UTF-8N.
よって-E
を利用します。
$ echo "%A4%CF%A4%C6%A4%CA%A5%D6%A5%ED%A5%B0" | tr % = | nkf -EmQ はてなブログ
確かに変換できました。
次は逆変換です。
nkfのオプションであるEとeは使い分けがされており、EUCコードを出力する場合は-e
を利用し、入力をEUCコードとして扱う場合は-E
となります。
よって以下で逆向きの変換が可能です。
$ echo "はてなブログ" | nkf -eMQ =A4=CF=A4=C6=A4=CA=A5=D6=A5=ED=A5=B0
終わりに
Eとeの違いを抑えれば以下の挙動にも納得できると思います。
$ echo "はてなブログ" | nkf -e | nkf -EMQ =E3=81=AF=E3=81=A6=E3=81=AA=E3=83=96=E3=83=AD=E3=82=B0 $ echo "はてなブログ" | nkf -WMQ =E3=81=AF=E3=81=A6=E3=81=AA=E3=83=96=E3=83=AD=E3=82=B0
以上、日本語URLに関するデコードとエンコードに関する補足でした。
ウェブサイトによってはEUCコードが採用されている場合もあるので、本記事がお役に立てば幸いです。