Heim >Java >JavaBase >Einführung in Lösungen für verstümmelte Dateinamen in Java-Downloads

Einführung in Lösungen für verstümmelte Dateinamen in Java-Downloads

尚
Original
2019-12-03 10:53:541973Durchsuche

Einführung in Lösungen für verstümmelte Dateinamen in Java-Downloads

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

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 (%E6%B5 %8B %E8%AF%95%E6%96%87%E4%BB%B6.doc) ist der Test unter dem IE-Browser normal, aber der beim Testen unter dem Firefox-Browser erhaltene Dateiname ist nicht dekodierter Unicode.

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 kodiert UTF8 den Dateinamen über URLEncoder.

Andere Browser (Firefox, Chrome, Safari, Opera) müssen Bytes in ISO8859-1 konvertieren.

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");
}

Weitere Java-Kenntnisse finden Sie in der Spalte Java Basic Tutorial.

Das obige ist der detaillierte Inhalt vonEinführung in Lösungen für verstümmelte Dateinamen in Java-Downloads. 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