用 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).风吹麦浪

参考文档:
[1] http://www.javaeye.com/topic/250355
[2] http://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s


%d bloggers like this: