2014-03-25 127 views
5

简单的推杆我无法下载已在我的网络服务器托管,如果他们有在文件名中的特殊字符,因为我得到404 enter image description here与非ASCII字符的文件名的Linux找不到错误

如果我的文件创建一个名为olá.txt的文件我似乎没有找到正确的URL来下载它。我已经尝试了所有可能的方式来下载:

mydomain.com/olá.txt 
mydomain.com/ol%C3%A1.txt 

,我总是从的Apache Tomcat 7.0.3收到了404,但如果我更改文件名ola.txt一切都很好。

我已经将AddDefaultCharset utf-8添加到httpd.conf,但我仍然有问题。

我的意思是应该可以下载名称中包含非ASCII字符的文件,对吧?

更新:我server.xml有:

<Connector URIEncoding="UTF-8" compressableMimeType="text/javascript,text/css" 
    compression="on" compressionMinSize="2048" connectionTimeout="20000" 
    noCompressionUserAgents="gozilla, travista" port="8080" 
    protocol="HTTP/1.1" redirectPort="8443"/> 

更新:

echo -n olá | od -An -tx1 = 6f 6c c3 a1 
echo $LANG = en_US.UTF-8 

区域:

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= 
+1

请告诉我们'echo -nolá| od -An -tx1',还有'echo $ LANG' –

+0

另外'locale'的输出可能很有用,如果你自己和运行'tomcat'的用户都可以做到这一点,那将是最好的。 –

+0

@WalterTross问题已更新 –

回答

2

您可能需要这在server.xml中添加到<connector ... />标签对于Tomcat:

URIEncoding="UTF-8" 

更多信息:

How to get UTF-8 working in Java webapps?

utf-8 url problem


我有麻烦在我结束重现这个蜜蜂。我已经在Ubuntu 12.04.4 LTS上完成了Tomcat 7.0.26的全新安装,创建了/var/lib/tomcat7/webapps/ROOT/testé.txt,并成功地将该文件提供给了我的浏览器,网址为http://localhost:8080/testé.txt

这是/etc/tomcat7/server.xml我的连接器标签:

<Connector port="8080" protocol="HTTP/1.1" 
      connectionTimeout="20000" 
      URIEncoding="UTF-8" 
      redirectPort="8443" /> 

我不能说,为什么你不工作,在这个时候,但我至少可以确认的服务与tomcat7 UTF-8编码的文件是可能的。

+0

(qu estion更新)我认为它是编码,我的意思是至少我有server.xml和404错误图像给utf8编码的名称,对不对? –

+0

编辑答案以回应您的问题中的新信息。希望这只是一个简单的打字错误修正。 – awiseman

+0

对不起,但XML有正确的标记,这是我的错误粘贴在这里 –

0

问题可能什么都没有做与Tomcat或URL编码,它实际上可能与FTP连接(或任何你正在使用的文件发送到远程主机)的编码问题。

如果它们不同,你会发送一个你认为是“testé”的文件,然后从同一个源返回它将返回“testé”。但在文件系统上,文件可能编码方式不同(如果LANG已正确设置,则为,即使为)。

尝试从Tomcat创建文件并以UTF8和URL编码形式请求它。如果它工作,然后尝试从您的FTP客户端查看文件名。

+1

我已经通过“vi”创建文件进行实际测试: vitesté.txt 我无法下载,但如果我这样做: mvtesté.txtteste.txt 它的工作原理...您认为这个问题可能是一样的? –

+0

这样的测试可能没有结果。你必须用Tomcat来创建它。即使是简单的执行'touch/full/path/to /testé.txt',如果由Tomcat进程完成,也可以告诉我们是否是这种情况。 **我能够在系统上重现相同的症状**,但我必须在客户端的Windows 7上使用PuTTY,并在服务器上使用Linux OpenSuSE 13.1。 – LSerni

+0

root用户似乎是tomcat用户,至少当我这样做时: ps auxwww | grep -v grep | grep tomcat 它给出 root 2321 ... Tomcat Servlet容器 –

相关问题