expertenaustausch > comp.lang.* > comp.lang.java

Andreas (02.03.2004, 16:58)
Problem:
In meiner Webapplikation realisiert ein Servlet den Dateidownload. Ein
Klick auf einen Datei-Link f?hrt
zu dem "Speichern unter" Dialog des Browsers.
Benutze ich Tomcat allein (Port 8080), klappt alles prima. Die
Sonderzeichen werden in ISO-8859-1 dargestellt.
Apache2/mod_jk scheint das charset in UTF-8 zu ?ndern. Aus der Datei
"t?st.txt" wird z.B. "tät.txt".

Code:
response.setHeader("Content-Disposition", "attachment; filename=" +
file.getName());
response.setContentLength((int)file.length());
response.setContentType("application/octet-stream");
response.setHeader("Content-Transfer-Encoding", "binary");

Probiert habe ich auch:
response.setContentType("application/octet-stream;
charset=ISO-8859-1");
oder
String tmpName = new String(f.getName().getBytes(),"ISO-8859-1");
response.setHeader("Content-Disposition", "attachment;
charset=ISO8859-1; filename="+tmpName);
oder
response.setHeader("Content-Transfer-Encoding", "ISO-8859-1");

Konfiguration:
- Suse 8.2
- Apache2.0.48
- Tomcat4.1.18
- mod_jk
- $tomcat_home/bin/catalina.sh:
export CATALINA_OPTS="-Dfile.encoding=ISO-8859-1 -Duser.language=de
-Duser.country=DE"

Wer wei? Rat ? Vielen Dank !

Andreas
Sven Köhler (02.03.2004, 20:20)
> In meiner Webapplikation realisiert ein Servlet den Dateidownload. Ein
> Klick auf einen Datei-Link f?hrt
> zu dem "Speichern unter" Dialog des Browsers.
> Benutze ich Tomcat allein (Port 8080), klappt alles prima. Die
> Sonderzeichen werden in ISO-8859-1 dargestellt.
> Apache2/mod_jk scheint das charset in UTF-8 zu ?ndern. Aus der Datei
> "t?st.txt" wird z.B. "tät.txt".


Tja, eigentlich sollte man das Erkl?ren k?nnen, aber submitte doch mal
nen BugReport an die Tomcat-Leute, mal gucken wie die dir das erkl?ren
wollen.
Ich weiss nur, dass es quasi keine M?glichkeit gibt, ein Charset f?r die
HTTP-Header anzugeben. Aber wie gibt man dann ein "?" an? Am besten gar
nicht, weil unter MacOSX werden die Header vielleicht mit UTF-8
interpreriert, und bei Linux dem locale entsprechend - also mal so mal so.

> Code:
> response.setHeader("Content-Disposition", "attachment; filename=" +
> file.getName());
> response.setContentLength((int)file.length());
> response.setContentType("application/octet-stream");
> response.setHeader("Content-Transfer-Encoding", "binary");


Ist alles richig.

> Probiert habe ich auch:
> response.setContentType("application/octet-stream;
> charset=ISO-8859-1");


Das bringt nix, ?ndern nur das Charset f?r die Daten die du sendest,
nicht aber f?r die HTTP-Header.

> oder
> String tmpName = new String(f.getName().getBytes(),"ISO-8859-1");


Neee, so geht das nicht.

> response.setHeader("Content-Disposition", "attachment;
> charset=ISO8859-1; filename="+tmpName);


seit wann kann man im Content-Disposition-Header nen Charset angeben? So
geht das auch nich.

> oder
> response.setHeader("Content-Transfer-Encoding", "ISO-8859-1");


Neee, auch nich. Das bezieht sich wie der Content-Type auch nur auf das
Content! nicht aber auf die Header.
Ähnliche Themen