åäö 将网站移动到新主机后文件名不起作用

åäö 将网站移动到新主机后文件名不起作用

我最近将 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)。这将防止文件名发生更改,因为它们现在是另一个文件中的数据。

相关内容