说起「乱码」,没遇到过的电脑用户可能是极少的,尤其在国内中文环境下。暴露年龄的「烫烫烫」系列乱码已经绝迹,现如今遇到的往往是类似「%E9%AB%98%E9%A2%91」和「自在飞花轻似梦」的字符串。本文就这两种乱码情况分别给出解决方法。

首先应该说明的是,本文所说的方法是在出现文件名乱码情况下,如何恢复文件名的正确中文名称,并非一劳永逸地避免乱码的出现。这是由于下载文件名称乱码的出现,往往是系统、浏览器、网站三方面因素共同影响导致的,错综复杂。想要避免乱码的出现,只能根据具体的情况,对个人的系统或浏览器做出针对特定网站的调整配置。

%E9类型乱码

这种情况往往是由于网站和浏览器之间存在兼容性问题导致的,我在 macOS 英文系统上使用 Firefox 下载网盘中的文件时就遇到过,这些形如「%E9%AB%98%E9%A2%91」的字符串实际上是文件名的 URL 编码。下面介绍各系统平台上的解决方法。

macOS 系统

macOS系统自带强大的自动化支持,如 Automator 和 AppleScript。这里,我使用 Automator 编写了一个文件服务,使用方法:

首先,下载「 ♲ 文件名 UrlDecode.workflow.zip 」,解压后双击安装。

null

然后,右键单击需要处理的文件,选择 服务 子菜单中的 ♲ 文件名 UrlDecode ,完毕。

这个服务不需要网络,支持批量处理多个文件或文件夹。用 Automator 打开会发现其原理很简单,只有「运行 Shell 脚本」的操作,其中的 Shell 代码为:

# 调用 Python 内置模块进行解码
alias urldecode='python -c "import sys, urllib as ul; print ul.unquote_plus(sys.argv[1])"'
# 遍历选择的文件列表,进行重命名
for f in "$@"
    newName=$(urldecode "$f")
    mv "$f" "$newName"

Windows 系统

相比 macOS, Windows 缺乏友好、易用的自动化工具。在安装 Python 后,可以利用批处理命令调用代码 python -c "import sys, urllib as ul; print ul.unquote_plus(sys.argv[1])" 进行文件名修复。但是考虑到该过程略复杂,该类乱码出现频率较低,所以这里不提供工具,而是介绍如何利用在线网站解决问题。

  • 复制文件的乱码名称,如「%E9%AB%98%E9%A2%91」。
  • 打开 在线解码网站 。粘贴到输入框,点击下方的「UrlDecode 解码」,即可得到对应中文。
  • 复制解码后的中文,重命名文件。
  • Linux 系统

    Linux 各发行版和桌面环境的差异较大,且用户折腾能力较强,这里就不给出具体工具了。可根据自己的实际情况,利用上方的 Shell 代码尝试解决。

    iOS 与 Android 系统

    手机系统上同样难以做到 macOS 上的「一键修复」,推荐使用上文中 Windows 系统小节的在线网站解决。

    自å 类型乱码

    这种乱码的形成过程基本相似,但其中涉及的编码却各有不同,错综复杂。考虑到国内电脑用户遇到的情况,多出现于从国内的政府、院校、企业等网站下载文件时,一般属于同一种类型,即 GBK 编码解码错误。下面将针对此种类型给出解决方法。

    首先,我以经常出现乱码的知网文献下载为例,使用各系统及浏览器进行测试。结果如下:

  • Win10 1803版本 中文 系统 Edge 浏览器 下载文献的文件名为 乱码 IE 浏览器 下载文件名 正常 Chrome 浏览器 下载文件名为 乱码
  • macOS 10.13.4 中文 系统 Safari 与 Chrome 浏览器 下载文件名均 正常 英文 系统中,两种浏览器下载文件名均为 乱码
  • Ubuntu 16.04 系统,环境变量 LC_ALL="en_US.UTF-8" 情况下, Firefox 浏览器 下载文件名为 乱码
  • 需要说明的是:上述结果仅表明使用这些系统、语言、浏览器组合进行下载时的一般情况,并不能表明该组合下载时完全有或无乱码。这是由于乱码的产生与否,是由系统、浏览器、网站三方共同决定的。

    macOS 系统

    这里,我同样是使用 Automator 编写了一个文件服务,无需网络,支持批量处理。下载 「å 修复文件名乱码.workflow.zip」 ,解压后双击安装。

    然后,右键单击需要处理的文件,选择服务子菜单中的 å 修复文件名乱码 ,稍等即可。如果没有这个服务项,就重启试试。

    用 Automator 打开会发现其原理很简单,只有「运行 Shell 脚本」的操作,其中的 Shell 代码为:

    for f in "$@"
        fileName=$(basename ${f})
        filePath=$(dirname ${f})
        # 两种乱码类型 GBK、UTF-8
        { fileNewName=$(echo $fileName | iconv -f UTF-8-Mac -t latin1 | iconv -f gbk)
        } || { fileNewName=$(echo $fileName | iconv -f UTF-8-Mac -t latin1)
        # 文件名正常或乱码类型不属上述两种时,新文件名为空,则跳过
        if [ -n "$fileNewName" ]; then
            # 避免文件重复:如果已存在修复后的文件名,则在新文件名后加上随机字符串。
            if [ -e ${filePath}/$fileNewName ]; then
                mv "$f" "${filePath}/${fileNewName}-${RANDOM}"
                mv "$f" "${filePath}/${fileNewName}"
    

    可以看到上述代码是在解决两种乱码情况,其中 GBK 乱码是我们常遇到的,UTF-8 类型的则是由读者在下方评论中提出的,较为少见,顺手加上。

    Windows 系统

    首先,下载 Python ,双击打开,如下图所示。先勾选「Add Python 3.6 to PATH」,然后点击「Install Now」进行安装,一路下一步。

    Win10安装Python
    Win10安装Python

    然后,下载 「文件名乱码修复.bat」 ,随意放在你喜欢的位置。需要修复文件名乱码时,拖动文件到 文件名乱码修复.bat 上方后释放即可。

    Win乱码修复
    Win乱码修复

    「文件名乱码修复.bat」的内容很简单,只有一句话:

    python -c "import sys,os;fp=os.path.dirname(sys.argv[1]);fn=os.path.basename(sys.argv[1]);os.rename(sys.argv[1],os.path.join(fp,fn.encode('latin1').decode('gbk')))" %1
    

    Linux 系统

    由于 Linux 各发行版及桌面环境差异较大,这里仅给出核心命令。

    echo 文件名乱码 | iconv -t latin1 | iconv -f gbk
    

    通过运行该命令,可得到正常的文件名称,复制后重命名即可。

    iOS 与 Android 系统

    如果在 iOS、Android 上遇到类似于「自在飞花轻似梦」文件名乱码,那么最好在电脑上重新下载后再修复名称。这是由于移动系统上对文件的处理,不像电脑系统上那么方便。而且也应该避免复制文件名称中的乱码文字,因为乱码中往往存在不可见字符,在复制粘贴过程中可能出现遗漏或错误。

    另外,如果繁体中文、日语等语言文字的电脑用户遇到类似的文件名乱码问题,可将本文代码中的 gbk 改为相应语言的编码名称以尝试解决,如繁体中文 BIG5、日文 JIS。

    乱码的出现总是让人烦心的。希望本文介绍的方法能够帮助你解决遇到的问题。

    如果你想了解第一种乱码相关的 URL 编码,可以看 这篇文章
    第二种乱码相关的字符编码知识,则推荐阅读:

  • 十分钟搞清字符集和字符编码
  • 彻底搞懂乱码——字符,字节和编码
  • > 下载 少数派 iOS 客户端 、关注 少数派公众号 ,让智能设备更好用 ⚡️

    271
    91
    271
    等 271 人为本文章充电