Firefox のアドオン『DownloadThemAll!』(DTA)で日本語のファイルをダウンロードすると稀にデコードされない状態で保存される。例えば ファイル.zip
であれば %E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB.zip
のような状態。
OS X のアーカイブユーティリティで解凍したときに、ものによってはアーカイブ内の名前で解凍されるものもあるけどデコードされていない状態で解凍されるものも多い。これをちょっと直してみようと思った。
URL のデコードを行うのに Perl、PHP、Python を用いてみた。Perl と PHP は普段まったく使わないので正しい書き方かどうかはわからない。
# 単一ファイル perl -e 'use URI::Escape; rename(@ARGV[1], uri_unescape(@ARGV[1]));' %E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB.zip # 複数ファイル perl -e 'use URI::Escape; foreach (@ARGV) { rename($_, uri_unescape($_)); }' %E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB.zip
# 単一ファイル php -r 'rename($argv[1], rawurldecode($argv[1]));' %E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB.zip # 複数ファイル php -r 'foreach (array_slice($argv, 1) as $f) { rename($f, rawurldecode($f)); }' %E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB.zip
urllib モジュールを用いる。+
を変換する場合は unquote_plus()
。
# 単一ファイル python -c 'import os, sys, urllib; os.rename(sys.argv[1], urllib.unquote(sys.argv[1]))' %E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB.zip # 複数ファイル python -c 'import os, sys, urllib for f in sys.argv[1:]: os.rename(f, urllib.unquote(f)) ' %E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB.zip
最も簡単だったのは PHP かなぁ。
とりあえずこれを Finder から使えるようにするので AppleScript を書く。AppleScript 側でファイルパスの変換を行うのにどうしてもループを使わなくてはいけないので変換部分は単一ファイル用を用いる。変換部分は Python の勉強中なので Python で。AppleScript の repeat
って一行で書けたような気がしたけど気のせいかな…。
tell application "Finder" to repeat with f in selection as alias list do shell script "python -c 'import os, sys, urllib; os.rename(sys.argv[1], urllib.unquote(sys.argv[1]))'" & space & quoted form of POSIX path of f end repeat
あとはアプリケーションにして Finder のツールバーにでも置いておく。

AppleScript: The Definitive Guide: Scripting and Automating Your Mac
- 作者: Matt Neuburg
- 出版社/メーカー: O'Reilly Media
- 発売日: 2009/06/30
- メディア: Kindle版
- この商品を含むブログを見る

- 作者: 辻真吾
- 出版社/メーカー: 技術評論社
- 発売日: 2010/04/24
- メディア: 大型本
- 購入: 19人 クリック: 199回
- この商品を含むブログ (33件) を見る

初めてのPHP、MySQL、JavaScript&CSS 第2版
- 作者: Robin Nixon,永井勝則
- 出版社/メーカー: オライリージャパン
- 発売日: 2013/08/21
- メディア: 大型本
- この商品を含むブログ (1件) を見る