Heim  >  Artikel  >  Java  >  Der Dateiname ist verstümmelt, wenn Java die Datei herunterlädt

Der Dateiname ist verstümmelt, wenn Java die Datei herunterlädt

王林
王林Original
2019-11-23 15:04:523193Durchsuche

Der Dateiname ist verstümmelt, wenn Java die Datei herunterlädt

Funktion zum Herunterladen von Webentwicklungsdateien (Code lautet wie folgt). Wenn der Dateiname chinesische Zeichen enthält, wird er häufig verstümmelt angezeigt und muss codiert werden.

String fileName = "测试文件.doc";
try {
    HttpServletResponse response = 
    (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
    response.setHeader("Content-disposition", "attachment; filename=" + fileName);
    response.setContentLength((int) file.length());
    response.setContentType("application/octet-stream;charset=UTF-8");
    byte[] b = new byte[1024];
    int i = 0;
    FileInputStream fis = new FileInputStream(file);
    ServletOutputStream out = response.getOutputStream();
    while ((i = fis.read(b)) > 0) {
        out.write(b, 0, i);
    }
    out.flush();
    out.close;
    fis.close();
} catch (IOException e) {
    e.printStackTrace();
}
FacesContext.getCurrentInstance().responseComplete();
return null;

Option 1: Dateinamen in Unicode kodieren

fileName = URLEncoder.encode(fileName, "UTF-8");

Der Dateiname wird in Unicode-Kodierung konvertiert. Der Test ist unter dem IE-Browser normal, aber unter Der Firefox-Browser Der durch den Test erhaltene Dateiname ist Unicode ohne Dekodierung.

Option 2: Kodieren Sie den Dateinamen nach ISO-8859-1

fileName = new String(fileName.getBytes("UTF-8"), "ISO-8859-1");

Mit dieser Methode können Dateien mit chinesischen Dateinamen sowohl unter IE als auch unter Firefox abgerufen werden. Wenn der Dateiname jedoch Leerzeichen enthält, schneidet Firefox die Leerzeichen im Dateinamen ab und Sie müssen die Leerzeichen im Dateinamen vor der Codierung durch sichtbare Zeichen wie Unterstriche ersetzen.

fileName = new String(fileName.replace(" ", "_").getBytes("UTF-8"), "ISO-8859-1");

Option 3: Browser-Inkompatibilität

Bei der Java-Webentwicklung tritt häufig das Problem verstümmelter Dateinamen in Datei-Download-Funktionen auf. Verschiedene Browser bieten unterschiedliche Lösungen für dieses Problem.

Für IE wird der Dateiname über URLEncoder UTF8-codiert, während andere Browser (Firefox, Chrome, Safari, Opera) Bytes in ISO8859-1 konvertieren müssen.

if (request.getHeader("User-Agent").toUpperCase().indexOf("MSIE") > 0) {
    filename = URLEncoder.encode(filename, "UTF-8");
} else {
    filename = new String(filename.getBytes("UTF-8"), "ISO8859-1");
}

Empfohlenes Tutorial: Einführung in die Java-Entwicklung

Das obige ist der detaillierte Inhalt vonDer Dateiname ist verstümmelt, wenn Java die Datei herunterlädt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn