2014-03-25 4 views
5

einfach geputtet ich keine Dateien herunterladen kann, die in meinem Web-Server gehostet werden, wenn sie in den Dateinamen Sonderzeichen haben, weil ich 404. enter image description hereLinux Nicht gefunden Fehler für Dateinamen mit Nicht-ASCII-Zeichen

bekommen Wenn ich erstelle eine Datei namens olá.txt Ich finde nicht die richtige URL um sie herunterzuladen. Ich habe alle Möglichkeiten versucht, es zum Download:

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

und ich immer eine 404 von Apache Tomcat 7.0.3 bekommen, aber wenn ich den Dateinamen ändern, alles zu ola.txt ist in Ordnung.

Ich habe AddDefaultCharset utf-8 in die httpd.conf hinzugefügt, aber ich habe immer noch das Problem.

Ich meine, es sollte möglich sein, Dateien mit Namen herunterzuladen, die nicht ASCII-Zeichen enthalten, oder?

Update: Mein server.xml hat:

<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"/> 

Update:

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

locale:

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

Bitte sagen Sie uns die Ausgabe von 'echo -n olá | od -An -tx1', und auch von echo $ LANG' –

+0

Auch die Ausgabe von 'locale' könnte nützlich sein, und es wäre am besten, wenn Sie all dies als Sie selbst und den Benutzer, der' tomcat' –

+0

ausführt, ausführen könnten @WalterTross Frage aktualisiert –

Antwort

2

Sie könnten dies in Ihrer server.xml zum <connector ... /> Tag hinzufügen müssen für Kater:

URIEncoding="UTF-8" 

Weitere Informationen:

How to get UTF-8 working in Java webapps?

utf-8 url problem


Ich habe Biene Probleme, diese auf meinem Ende zu reproduzieren. Ich habe eine saubere Installation von Tomcat 7.0.26 auf Ubuntu 12.04.4 LTS, erstellt /var/lib/tomcat7/webapps/ROOT/testé.txt, und lieferte diese Datei erfolgreich an meinen Browser unter der URL http://localhost:8080/testé.txt.

Dies ist mein Anschluss-Tag in /etc/tomcat7/server.xml:

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

Ich kann nicht sagen, warum Ihr nicht funktioniert, zu diesem Zeitpunkt, aber ich kann zumindest bestätigen, dass UTF-8-kodierten Dateien mit tomcat7 dienen ist möglich.

+0

(qu Estion aktualisiert) Ich denke, es ist Codierung, ich meine zumindest ich habe es auf der server.xml und das 404-Fehlerbild gibt den utf8-codierten Namen, richtig? –

+0

bearbeitete Antwort, um auf die neuen Informationen in Ihrer Frage zu antworten. Hoffentlich ist das nur ein einfacher Tippfehler für dich. – awiseman

+0

Sorry, aber die XML hatte das richtige Tag, es war mein Fehler, hier zu schreiben –

0

Das Problem hat möglicherweise nichts mit Tomcat oder URL-Kodierung zu tun, und es könnte tatsächlich ein Problem sein mit die Kodierung der FTP-Verbindung (oder was auch immer Sie verwenden, um die Dateien an den Remote-Host zu senden).

Wenn sie sich unterscheiden, senden Sie eine Datei, die Sie als "testé" sehen würden, und die Rückfrage aus derselben Quelle würde natürlich "testé" zurückgeben. Aber auf dem Dateisystem könnte die Datei anders kodiert sein (sogar, wenn LANG richtig eingestellt ist).

Versuchen Sie Erstellen der Datei von Tomcat und fordern Sie es in UTF8 und URL-codierten Formularen. Wenn es funktioniert, dann versuchen Sie den Dateinamen von Ihrem FTP-Client zu sehen.

+1

Ich habe tatsächlich durch Erstellen der Dateien über "vi" getestet: vi testé.txt und ich kann es nicht herunterladen, aber wenn ich tue: mv testé.txt teste.txt es funktioniert ... denkst du Das Problem könnte das gleiche sein? –

+0

Dieser Test ist möglicherweise nicht eindeutig. Sie müssen es mit Tomcat erstellen. Selbst eine einfache Ausführung von 'touch/full/path/to/testé.txt' könnte, wenn sie durch den Tomcat-Prozess ausgeführt wird, uns sagen, ob dies der Fall ist. ** Ich konnte die gleichen Symptome auf meinem System reproduzieren **, aber ich musste PuTTY unter Windows 7 auf dem Client und ein Linux OpenSuSE 13.1 auf dem Server verwenden. – LSerni

+0

Der Root-Benutzer scheint Tomcat-Benutzer zu sein, zumindest wenn ich Folgendes tue: ps auxwww | grep -v grep | grep tomcat gibt es root 2321 ... Tomcat Servlet Container –

Verwandte Themen