我最近将 WordPress 站点从one.com
运行 Ubuntu 16 和 Apache 的 Linux vps 服务器迁移到了。一切正常,除了带有 åäö 的图像显示为损坏,右键单击并复制链接显示以下内容。
/images/vara-p%C3%A5l%C3%A4st1.jpg
一旦您将其粘贴到浏览器地址栏中并按 Enter 键,它就会变成
/images/vara-påläst1.jpg
并显示 404 错误。我导航到/images/
其中列出了目录中的所有文件,我可以看到它就vara-påläst1.jpg
在那里。
从图像文件夹复制链接给我以下内容
/images/vara-pa%cc%8ala%cc%88st1.jpg
这会解析为正确的图像。
文件名显然有问题,在我看来这是一个编码问题。我试图解决这个问题,convmv -f iso-8859-1 -t utf8 *
但它说所有文件都已经是 UTF-8 编码,并且不会更新任何内容。
从另一个网络主机传输文件名后,如何修复带有 åäö 字符的文件名?
答案1
convmv
是正确的:文件名已经是 UTF-8 编码的。我认为它仍然是正确使用的工具。
Unicode 中有不止一种获取å
字形的方法。第一种方法是å
(U+00E5) 作为一个字符单独存在,这就是它在链接中的编码方式。
但您也可以采用普通a
(U+0061),并添加圆圈̊
(U+030A) 作为组合字符,得到å
。在迁移过程中,某些东西必须将您的文件名从第一个表示重新编码为第二个表示。
这的手册页convmv
引用“规范化形式 C”(在 Linux 上使用)和“规范化形式 D”(在 OS X 上使用)。从实验来看,C式代表å
用自己的字,D式代表å
用组合圈。
备份文件,以便在出现问题时有一个已知的检查点,然后尝试以下操作:
convmv --nfc -f utf8 -t utf8 *
或者,您可以再次尝试迁移并完全避免重新编码问题。
如果您在旧主机上具有 shell 访问权限,则可以创建tar
站点的存档 ( tar czf my_site.tar.gz my_site_directory
),然后将存档复制到新主机并在那里解压 ( tar xzf my_site.tar.gz
)。这将防止文件名发生更改,因为它们现在是另一个文件中的数据。