article_image

下载文件或打开压缩包后,时常遇到 %E4%B9%B1%E7%A0%81 形式的文件名乱码。此问题似乎非常普遍,因此在几年前,我曾约涔君专门撰文。原文从原理到方案巨细靡遗,惟操作系统几经更迭,目前可能无法直接使用;而修改代码毕竟有一些门槛,非人人能及。1

我在此另寻蹊径,借助 Shortcuts 修复文件名乱码,无需乞援代码,或许也是一条捷径。你可以在下面下载 Shortcuts 动作,也欢迎关注我的 GitHub,以第一时间获得更新消息。

Alt text
修改前后的文件

Shortcuts 动作下载

动作使用

在使用本文动作之前,请先在 Shortcuts 应用中打开它,检查是否将其作为 Quick Action 并勾选“Finder”选项,以确保它可以正常出现在文件的上下文菜单(右键菜单)中。

Alt text
使用前请确认将本动作设置为 Quick Action

使用时可以选中单个文件,也可以批量选择,在上下文菜单的“Quick Actions”中找到本动作——Filename Fix %,然后点击运行。

Alt text
运行 Shortcuts 动作

随后 Shortcuts 会检查每一个文件的名称,如果发现 %E4%B9%B1 类型的乱码,就会自动将其修复,同时跳过不包含乱码的文件。

Alt text
重命名提示

在执行重命名操作之前,如果当前文件夹是第一次处理,Shortcuts 还会要求权限,这是 Shortcuts 的已知限制,即便它是原生软件,也需要每次遇上新文件夹时重新授权。

Alt text
权限提示

原理简析

我此前写过一篇批量重命名文件的文章,而修复文件名其实也是一种重命名操作,因此两个动作的框架大体相同。不同之处至于在于,之前是手动输入重命名前后的字符,而此番则是自动尝试修复乱码。

所谓的“乱码”实则不乱,而是经过 URL 编码的文本,只要反过来解码即可获得人类可读的文件名。文件在网络传输中常常被编码,以免在不支持中文的服务器上出错,因此留下了很多 %E4%B9%B1 类型的“乱码文件”。

本文动作分为准备部分和执行部分,前者用于生成一则包含重命名前后对比的提醒。之所以必要,是因为通过 Shortcuts 执行的重命名操作不可逆,因此需要谨慎操作,避免盲操作。完整处理流程如下:

  1. 逐个获取文件名;
  2. 尝试将每个文件名解码,如果变动后的文件名与原名有异,一般就说明确实是 %E4%B9%B1 型乱码,此时将其放入“有变动”的列表;
  3. 反之,若尝试解码前后文本并无改动,则证明其不是 %E4%B9%B1 型乱码,这时候就存入“未变动”的列表;
  4. 展示将被重命名的文件以及不会变动的文件,供用户确认;
  5. 确认无误后,开始重命名文件,即修复文件名中的乱码。
Alt text
Shortcuts 动作步骤(准备部分)
Alt text
Shortcuts 动作步骤(重命名部分)

小结

在写《如何用 Shortcuts 和正则表达式批量重命名文件》时,我就感叹 Shortcuts for macOS 没有物尽其用,多数网站只是在吃 Workflow(Shortcuts 前身)时代的老本。Shortcuts for macOS 拥有大量文件相关模块,在继承现成图形化模块的同时又支持 AppleScript 和 Shell 脚本,理应在文件自动化领域一展拳脚;既然鲜有人涉足,鄙人就不装客气。

诚然,Shortcuts 能做的,传统的自动化工具——Automator、Alfred、LaunchBar 以及 Keyboard Maestro 等等——当然不在话下,而 Shortcuts 的价值则在于把事情变得更简单,通常不需要编写脚本,只要像堆积木一样组合一下现有模块,就能拿出实用的动作。写 Shortcuts for macOS 主题的文章,也就不是用 Shortcuts 重复造一遍旧轮子,而是用更轻松的方式设计工具。

UNTAG 持续关注 Shortcuts for macOS,除了几篇拙作,Hum 也写过批量处理文件夹的文章,之后我们也策划了多篇文章,希望多少能给 Shortcuts 社区做点贡献。


  1. 如有兴趣,可以用本文方法尝试解码一下“%E4%B9%B1%E7%A0%81”。

author_avatar

Lawyer, macOS/iOS Automation Amateur