`
RednaxelaFX
  • 浏览: 3052883 次
  • 性别: Icon_minigender_1
  • 来自: 海外
社区版块
存档分类
最新评论

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

    博客分类:
  • Ruby
阅读更多
呵呵又是文件重命名相关的脚本……总之先记下来免得以后要用又得重新敲代码。

刚重装了系统,换到英文的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'硬编码进去了。
分享到:
评论

相关推荐

    Velocity模板技术语法详细介绍

    10.转义字符的使用 ………………………………………………………………4 11.内置对象 ………………………………………………………………………5 12.数组的访问 ………………………………………………………………...

    java 转义和反转义工具类 java 转义和反转义工具类

    java 转义和反转义工具类 java 转义和反转义工具类java 转义和反转义工具类 java 转义和反转义工具类java 转义和反转义工具类 java 转义和反转义工具类java 转义和反转义工具类 java 转义和反转义工具类java 转义和...

    URL参数里的地址转义

    把URL参数里的地址转义,把URL参数里的地址转义,把URL参数里的地址转义,把URL参数里的地址转义,把URL参数里的地址转义,把URL参数里的地址转义,把URL参数里的地址转义,把URL参数里的地址转义,

    关于附件上传文件名包含特殊字符的问题解决办法

    ### 关于附件上传文件名包含特殊字符的问题解决办法 #### 背景介绍 在互联网应用开发中,经常需要处理用户上传的附件。这些附件可能包括文档、图片、视频等多种类型。然而,在实际操作过程中,可能会遇到一个常见...

    字符串转HTML的16进制转义符

    字符串转HTML的16进制转义符 是转过来的,因为当初自己研究了挺久,觉得这个会在学习的过程中有帮助,就一起共享过来了。 不好意思,之前没写明是什么语言写的。 这里声明一下:Java 这里对没看清楚的兄弟说一声...

    C++ gbk转unicode、ansi转unicode,字符串查找、切割、转十六进制、转二进制、转义,随机数等数据处理类源码

    5转义字符串 6随机数 源码包含了封装的功能模块类以及测试类, 全部源码都可以用VS2020编译通过,请放心使用! 友情提示,为了兼顾一些旧代码,预编译头文件用的是StdAfx.h,如果需要更换为最新的pch.h,请按照以下...

    将HTML的左右尖括号等转义成实体形式的两种实现方式

    我们不能把<,>,&等直接显示在最终看到的网页里。需要将其转义后才能在网页上显示。 转义字符(Escape Sequence)也称字符实体(Character Entity)。定义转义字符串的主要原因是 “<”和“>”等符号已经用来...

    gson转义字符

    本文将围绕“gson转义字符”这一主题展开,深入探讨如何避免Gson在使用时自动将一些字符转为Unicode转义字符。 ### 一、问题背景 在Java项目中,我们经常会使用Gson来处理JSON格式的数据。例如,我们需要将一个...

    html页面转义字符对照表

    这些转义字符通常由一个“&”字符开头,后面跟着表示该字符的代码或者名称,最后以一个“;”结束。这种方式可以确保HTML解析器能够正确地解释并展示这些特殊字符。 #### 基本转义字符 1. **空格( )**: 转义...

    ASCII码转义字符

    ASCII码的转义字符,以及郭天祥十天学会pic单片机的型号,单片机的入门级怎么学好单片机,学精!

    LitJson 扩展 扩展了一个不转义汉字的方法

    在处理中文字符时, LitJson 默认的行为可能会将汉字进行转义,这在某些情况下可能不是我们期望的结果,例如在对接接口或者保存包含汉字的文本时。为了解决这个问题,我们可以对 LitJson 进行扩展,使其支持不转义...

    VB代码把\uxxxx转换成汉字

    在VB(Visual Basic)编程环境中,...以上就是关于“VB代码把\uxxxx转换成汉字”的详细解释,希望对你理解及处理类似问题有所帮助。在实际编程过程中,应根据具体需求选择合适的方法,确保数据的正确性和程序的效率。

    转义字符.txt

    转义字符是编程语言中一个重要的概念,它们用于在源代码中表示特殊字符或控制序列。根据提供的文件信息,我们可以深入探讨转义字符在Java中的应用及其背后的原理。 ### 转义字符概述 转义字符是源代码中用于表示不...

    C#转义字符如何输出双引号等

    C#转义字符的使用和输出 C#转义字符是C#语言中的一种特殊字符常量,以反斜线"\"开头,后跟一个或几个字符。这些字符具有特定的含义,不同于字符原有的意义,故称“转义”字符。主要用来表示那些用一般字符不便于...

    常用HTML转义字符,html转义符,JavaScript转义符,html转义字符表,HTML语言特殊字符对照表(ISO Latin-1字符集) - 来源:嘻嘻网 114_xixik_com_files

    在JavaScript中,反斜杠(\)用于转义特殊字符,例如"\n"表示换行,"\t"表示制表符,"\\"表示反斜杠本身,而"\'"和'\"'分别用来转义单引号和双引号。JavaScript中还有一类特殊的转义序列,如"\u0026"用于表示ASCII码...

    C#常用的转义字符

    ### C#常用的转义字符 在C#编程语言中,转义字符是非常重要的概念之一,它们可以帮助开发者在字符串中插入特殊字符或者控制字符,从而实现更丰富的文本处理功能。本文将详细介绍C#中常见的转义字符及其用法,并通过...

    JS的MD5、转义、时间戳与日期互换

    JS的MD5、转义、时间戳与日期互换JS的MD5、转义、时间戳与日期互换JS的MD5、转义、时间戳与日期互换JS的MD5、转义、时间戳与日期互换JS的MD5、转义、时间戳与日期互换

    详解json串反转义(消除反斜杠).docx

    ### 详解 JSON 串反转义(消除反斜杠) 在处理 JSON 数据时,经常会遇到一些字符串需要进行反转义的情况,尤其是在从文件中读取 JSON 字符串并希望将其转换为 JSON 对象时。本文将详细介绍如何对 JSON 串进行反转义...

    字符 隐藏 —— 替代性转义

    在IT领域,字符隐藏与替代性转义是信息安全和数据编码中的重要概念,尤其是在字符串加密解密和网络协议中有着广泛的应用。字符隐藏通常是指在数据中嵌入秘密信息,而替代性转义则是一种确保特殊字符能在文本中正确...

    kindeditor特殊符号被转义

    kindeditor特殊符号被转义 kindeditor 编辑器添加图片、flash,还有视频时路径出错

Global site tag (gtag.js) - Google Analytics