jqでURIエンコードする

ka2n
ka2n
(Updated: )

ごく稀にbashなどのシェルや、CLIプログラムで使用するプログラムから日本語などをURIエンコードしたいことがあると思います。
そのためにrubyやnode.jsを動かすのも面倒だなぁ、と思っていたのですがjqでもできることがわかったのでメモしておきます。

やり方

$ echo "日本語" | jq -Rr @uri
%E6%97%A5%E6%9C%AC%E8%AA%9E

# echoには改行(\n)が含まれるがそれも含める場合
$ echo "日本語" | jq -sRr @uri
%E6%97%A5%E6%9C%AC%E8%AA%9E%0A

オプションの説明

  • -R, --raw-input: JSONとしてパースせず、行ごとに文字列として処理を行う
  • -r, --raw-output: 文字列として出力を行う
  • @uri: percent-encoding を行う
    • ほかにもこんなのがありました。(jq (1): Linux man pages – code.tools)
      • @html: HTMLとしてエスケープする
      • @base64 : Base64エンコードする
      • @json,@csv,@tsv: JSON,CSV,TSVとして出力
ka2n

ka2n

Webエンジニアです