Tuesday, February 1, 2011

用 ruby 做url decode

最近用iGetter从离线迅雷的服务器下载文件时, 发觉文件名会成为这样的东西:

%C0%EE%BD%A1.(%B8%BD%D4%F9MV).%B7%E7%B4%B5%C2%F3%C0%CB

这是encode过的url。
于是必须进行url decode。发觉竟然没有一个现成的command line tool能用。
网上的资源中, 英文版的一般不能处理这样的字符串, 因为它是用GBK编码再encode的。
于是自己用ruby简单地写了一下:

#!/usr/bin/env ruby
# -*- coding: utf-8 -*- 

require 'uri'
require 'iconv'

if ARGV.size <= 0 
        puts "Usage: ./urldecode url ..."
        exit
end

ARGV.each do |a| 
        str=URI.decode("#{a}")
        puts Iconv.conv("utf-8", "gbk",str)
end

注意国内资源一般是在win下用gbk编码的, 所以带来了很多不方便, 直接url decode得到的并不是utf8编码的字串。
因此必须用iconv转换一下。

使用方法为:
./urldecode "%C0%EE%BD%A1.(%B8%BD%D4%F9MV).%B7%E7%B4%B5%C2%F3%C0%CB"

得到正确的字串为:

李健.(附赠MV).风吹麦浪

参考文档:

No comments: