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

Mar*_*amn 5 filesystems ubuntu filenames apache-httpd

我最近将一个 Wordpress 站点从one.com运行 Ubuntu 16 和 Apache 的 linux vps 服务器转移到了。一切正常,除了带有 åäö 的图像显示为损坏,右键单击并复制链接显示以下内容。

/images/vara-p%C3%A5l%C3%A4st1.jpg
Run Code Online (Sandbox Code Playgroud)

一旦您将其粘贴到浏览器地址栏中并按回车键,它就会变成

/images/vara-påläst1.jpg
Run Code Online (Sandbox Code Playgroud)

并显示 404 错误。我导航到/images/其中列出了目录中的所有文件,我可以看到它vara-pa?la?st1.jpg在那里。

从图像文件夹复制链接给了我以下内容

/images/vara-pa%cc%8ala%cc%88st1.jpg
Run Code Online (Sandbox Code Playgroud)

哪个解析为正确的图像。

文件名显然有问题,在我看来这是一个编码问题。我试图解决这个问题,convmv -f iso-8859-1 -t utf8 *但它说所有文件都已经是 UTF-8 编码的并且不会更新任何内容。

从其他网络主机传输文件后,如何修复带有 åäö 字符的文件名?

Jan*_*der 5

convmv是对的:文件名已经是 UTF-8 编码的。我认为它仍然是正确的工具。

Unicode 中有不止一种方法可以获取å字形。第一种方式是å(U+00E5) 作为一个字符单独存在,这就是它在您的链接中的编码方式。

但你也可以取一个法线a(U+0061),加上圆?(U+030A)作为组合字符,得到a?. 迁移过程中的某些内容必须将您的文件名从第一个表示重新编码为第二个表示。

手册页convmv提到了“规范化形式 C”(在 Linux 上使用)和“规范化形式 D”(在 OS X 上使用)。从实验上看,C形代表å自己的性格,D形代表a?使用组合圈。

备份您的文件,以便在出现问题时有一个已知的检查点,然后尝试以下操作:

convmv --nfc -f utf8 -t utf8 *
Run Code Online (Sandbox Code Playgroud)

或者,您可以再次尝试迁移并完全避免重新编码问题。

如果您在旧主机上具有 shell 访问权限,则可以创建tar站点的存档 ( tar czf my_site.tar.gz my_site_directory),然后将存档复制到新主机并在那里解压缩 ( tar xzf my_site.tar.gz)。这将保护文件名免受更改,因为它们现在是另一个文件中的数据。