2014-03-25 126 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容器 –

相關問題