1

我有一个运行 Ubuntu 的网络服务器,网页上有一些链接指向服务器上的可下载文件。问题是由于字符编码,我有 404(未找到)。

在网站上的下载链接包含:Luís但服务器上的文件名显示为Lu�s当我这样做时ls

没有这种字符的文件链接不会显示任何问题,但如果我有“特殊”字符,则会发生 404。

有想法该怎么解决这个吗?

更新:当我运行语言环境时,我得到:

LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_CTYPE=en_US.UTF-8
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

不是吗?我的意思是它使用的是utf8,对吗?

4

2 回答 2

1

您在 Web 服务器上使用哪种语言环境?如果您的服务器语言环境和 HTML 编码页面相同,那就太好了。

我的意思是,您应该使用 UTF-8 作为服务器语言环境,使用 UTF-8 作为网页上的代码页。

如果您在 UTF-8 代码页中有 HTML 链接,但您的服务器具有例如 locale latin-1,您将遇到类似的问题。

因此,您需要检查服务器的语言环境,并且ls应该会显示与您在 HTML 链接中使用的文件名完全相同的文件名。

更新

如何在 Linux 上检查语言环境:只需 exec locale

如何检查 Apache 的默认编码页面(如果您使用 Apache 作为 Web 服务器)- 转到 httpd.conf 并检查如下内容:AddDefaultCharset utf-8

于 2012-12-19T11:35:37.087 回答
1

链接应为Lu%C3%ADs( Luís)。不幸的是,您服务器上的文件名实际上是Lu%EF%BF%BDs( Lu�s),这意味着它甚至从未正确创建。如果它是以编程方式创建的,则意味着程序在解码文件名时假定了错误的 UTF 编码。

如果您看到Lu�sls那么您的控制台肯定不是 UTF-8,它会显示Lu�s它是否是。但这只会表明文件名一开始就搞砸了,您需要修复创建这些文件的代码。

到目前为止,您应该能够下载带有链接的文件Lu%EF%BF%BDs,但这不是一个真正的解决方案,因为由错误代码创建的文件名中的任何非 ASCII 字符都将%EF%BF%BD位于 URL 中。

这就是我能从你的问题中说的全部内容。

于 2012-12-19T14:29:30.377 回答