← 返回目录

Rclone无法访问包含全角冒号(:)的文件名:原因与解决方案

发布于 2026-07-22
最初发布:2026-07-22 11:31:03 (UTC) · 最后修改:2026-07-29 04:03:17 (UTC) · 全文1682字 · 预计阅读6分钟

今天踩了一个很奇怪的 Rclone 坑:Windows 中文文件名 + 全角冒号(:)

今天用 Rclone 上传文件时,遇到了一个非常奇怪的问题。

Windows 明明可以正常打开目录:

E:\Test\Test:1

但是:

rclone lsf "E:\Test\Test:1"

却直接提示:

directory not found

最开始我怀疑:

结果都不是。


真正原因

后来才发现,这是 Rclone 的 Filename Encoding(文件名编码)机制

为什么会有这个机制?

因为:

Linux 可以有:

Test:1.jpg

Windows 却不能。

因此,Rclone 为了让各种不同平台之间能够互相复制文件,会自动做字符映射,例如:

:(半角)
↓
:(全。下同)
?(半)
↓
?(全)
*(半)
↓
*(全)

这样 Linux 上的文件也可以保存到 Windows。这个设计本身没有问题,而且也是 Rclone 的默认行为。(Rclone)


为什么中文用户容易踩坑?

问题就在这里。

我遇到的文件名根本不是 Linux 转过来的。

而是 Windows 本地创建的,文件名本身就包含真正的中文全角标点:

Test:1.jpg

注意:

这里的:

是真正的 Unicode 全角冒号。

但是 Rclone 默认会认为:

这个全角冒号,是以前为了兼容 Windows 而转换出来的。

于是它内部又把它理解成:

:

结果:

Windows 真正存在的是:

Test:1.jpg(全)

Rclone 内部却在寻找:

Test:1.jpg(半)

当然就只能得到:

directory not found

如何解决?

最简单的方法:

--local-encoding Raw

例如:

rclone copy ... --local-encoding Raw

或者:

rclone check ... --local-encoding Raw

加入以后,Rclone 就不会再自动转换:

:
?
*

文件可以正常上传、校验、列目录。

官方文档也说明了,如果 Windows 本地本来就使用全角 ,可以使用 --local-encoding Raw,或者调整 --local-encoding 配置。(Rclone)


这算 Bug 吗?

我觉得严格来说,不算。

这是一个兼容性设计

Rclone 要兼顾:

所以它必须有一套统一的文件名编码规则。这个编码系统从 v1.50 起就是为了让不同文件系统之间尽可能透明地传递文件名。(Reddit)

只是这个设计对于欧美用户几乎是透明的,而对于中文、日文等用户来说,由于全角标点本来就是正常文字,因此更容易遇到这种情况。


我的建议

如果你的工作流和我类似:

建议把:

--local-encoding Raw

加入自己的 Rclone 命令模板。

不用修改系统环境变量,也不用改 Rclone 默认配置。

既明确,又容易维护。


今天虽然折腾了半个小时以上,但最后还是学到了一个以前完全不知道的知识点。

以后如果有人搜索:

rclone directory not found Windows 中文文件名

或者:

rclone 全角冒号

希望这篇记录能帮他少走一点弯路。

 

来自官方参考文档:https://rclone.org/overview/

https://rclone.org/local/ 

 

鄙人也会长期维护这篇文章,欢迎补充和纠正。 计划后期也会分享出我的 Rclone 上传的模板等。


发现错误、补充建议或有使用经验?欢迎到主站留言讨论。

💬 到主站参与讨论
本文镜像页浏览 114 次 · 离线下载 4 次 · 已有 29 人读完