MAC OS:无法访问名称包含由 char+accent 组合而成的重音字符的文件夹

MAC OS:无法访问名称包含由 char+accent 组合而成的重音字符的文件夹

我正在尝试从 MAC(使用 Finder,或命令“find”或“ls”)访问一些名称包含重音字符的文件夹。其中一些文件夹在 MAC 上完全可见,有些则不然。这是我所做的和我发现的:

  • 我使用“lftp镜像”命令将文件夹从服务器获取到我的Synology NAS。
  • Lftp 配置为处理 UTF-8 格式的文件名
  • 当我尝试从 MAC 访问某些包含重音字符的文件夹时(使用 Finder 甚至命令“ls”或“find”),该文件夹无法访问。
  • 使用 NAS 的 GUI,我注意到相关文件夹的名称带有由两个不同字符组成的重音字符(例如,当您删除“é”时,首先删除重音,然后删除“e”)。
  • 名称包含简单重音字符的文件夹是可以的。
  • 当我将这些文件直接复制到我的 MAC 时(使用 rsync 将格式从 UTF-8 转换为 UTF-8 MAC),一切正常。我什至怀疑我不需要使用转换命令,只需复制文件(TBC)。

所以,问题很“简单”:我是否需要在使用文件之前系统地转换它们,或者是否有更好的方法。

此外,我不想转换镜像远程服务器的目录中的文件。我需要将重命名的文件复制到另一个位置以避免镜像命令出现问题。

答案1

我想你可能已经打过Unicode 规范化问题,但我不太确定具体是如何做到的。

我的猜测是 rsync 正在分解 macOS 的组合字符,但 lftp 不是。您可以通过在 NAS 和 Mac 上对受影响的文件名进行十六进制转储来确认这一点。这是我的 Linux 服务器上的示例:

> ls -l
total 1
-rw-rw-r-- 1 sam sam 0 May 24 11:16 NFC Pokémon
-rw-rw-r-- 1 sam sam 0 May 24 11:16 NFD Pokémon
> find . -name 'NFC*' | hexdump -C
00000000  2e 2f 4e 46 43 20 50 6f  6b c3 a9 6d 6f 6e 0a     |./NFC Pok..mon.|
0000000f
> find . -name 'NFD*' | hexdump -C
00000000  2e 2f 4e 46 44 20 50 6f  6b 65 cc 81 6d 6f 6e 0a  |./NFD Poke..mon.|
00000010

在 NFC 文件名中,“é”由字节序列 表示c3 a9,它是字符 U+00E9 带有锐音的拉丁文小写字母 E 的 UTF-8 编码。 NFD文件名中,“é”由字节序列 表示65 cc 81,即UTF-8 字符。65解码为 U+0065 拉丁文小写字母 E,并cc 81解码为 U+0301 组合锐音符号。

(我曾经find在这里打印文件名,因为我对 shell 如何处理文件名编码和通配符抱有迷信的不信任。)

无论如何,您可以使用此方法来确定文件名在 NAS 上的编码方式,以及将文件名保存到 Mac 时到底对文件名做了什么(或没有做什么)rsynclftp

不管到底发生了什么,我认为大多数时候你可以大概通过组合所有文件名来修复问题。我半定期地在我的服务器上执行此操作:

convmv -r -f utf-8 -t utf-8 --nfc /data/AUDIO/Library

注意:如果您对当前正在 torrent 客户端中播种的文件执行此操作,则可能会造成损坏。我认为这取决于客户。其他依赖于文件名中的确切字节序列的软件也可能会丢失您重新规范化的文件。

相关内容