把FireFox转义了的文件名转回来……

呵呵又是文件重命名相关的脚本……总之先记下来免得以后要用又得重新敲代码。

刚重装了系统,换到英文的XP了。把默认locale还是设在了中文上,不然以前用的一些CP936的程序可能就要乱码了。可是我没把FireFox的默认语言设为中文,结果用FireFox下某些附件的时候,中文字符就变成转义过的UTF-8了——一个汉字变成三个“%nn”的形式表示的字节。颇郁闷。其实一开始还没发觉是UTF-8,还以为就是把文件名按照系统默认locale给转义了而已;后来发觉字节数不对,才想起是UTF-8。
File::rename只能接受系统默认locale的字符串为参数,直接把转回来的UTF-8字符串仍给它还不行,非要再从UTF-8转回到GBK才行。诶那如果我把默认locale设回到英语了这个地方该怎么弄……||||

随手写了个脚本来转换:
#!/usr/bin/env ruby
require 'iconv'

def unescape_utf8(str)
str.gsub /%([a-zA-Z0-9]{2})/ do
"%c" % $1.to_i(16)
end
end

def utf82locale(str, locale)
Iconv.conv locale, 'UTF-8', str
end

def unescape2locale(str, locale)
utf82locale unescape_utf8(str), locale
end

def rename_escaped(filename)
File.rename filename, unescape2locale(filename, 'GBK')
end

def rename_escaped_in_dir(dir)
Dir.entries(dir).grep(/(?:%[a-zA-Z0-9]{2}){3}/) do |filename|
rename_escaped filename
end
end

if __FILE__ == $0
rename_escaped_in_dir ARGV[0] || '.'
end


没弄清楚怎么获取当前系统的locale,干脆就把'GBK'硬编码进去了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值