読者です 読者をやめる 読者になる 読者になる

😃 mattintosh note 📝

Hello Raspberry Pi!

DownloadThemAll でダウンロードしたファイルの文字化けを直す

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

# 単一ファイル
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

# 単一ファイル
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

Python

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

AppleScript: The Definitive Guide: Scripting and Automating Your Mac

Pythonスタートブック

Pythonスタートブック

初めてのPHP、MySQL、JavaScript&CSS 第2版

初めてのPHP、MySQL、JavaScript&CSS 第2版