1. 程式人生 > >下載中文檔案亂碼解決方式

下載中文檔案亂碼解決方式

首先我的目錄是:壓縮包即是我要下載的檔案

我的下載介面:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3> 使用a標籤指向伺服器資源 </h3>
<a href="/Web14_response/download/a.flv">a.flv</a><br>
<a href="/Web14_response/download/a.jpg">a.jpg</a><br>
<a href="/Web14_response/download/a.mp3">a.mp3</a><br>
<a href="/Web14_response/download/a.mp4">a.mp4</a><br>
<a href="/Web14_response/download/a.txt">a.txt</a><br>
<a href="/Web14_response/download/a.zip">a.zip</a><br>
<h3> 使用伺服器程式碼完成伺服器資源下載 </h3>
<a href="/Web14_response/DownloadServlet2?filename=a.flv">a.flv</a><br>
<a href="/Web14_response/DownloadServlet2?filename=a.jpg">a.jpg</a><br>
<a href="/Web14_response/DownloadServlet2?filename=a.mp3">a.mp3</a><br>
<a href="/Web14_response/DownloadServlet2?filename=a.mp4">a.mp4</a><br>
<a href="/Web14_response/DownloadServlet2?filename=a.txt">a.txt</a><br>
<a href="/Web14_response/DownloadServlet2?filename=壓縮包.zip">壓縮包.zip</a><br>

</body>
</html>

提供檔案下載的Servlet

package com.xpu.content;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import sun.misc.BASE64Encoder;

public class DownloadServlet2 extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 這個主要是下載中文的
		// 獲取要下載的檔案的名稱
		String filename = request.getParameter("filename");
		// 解決獲得中文引數的亂碼
		filename = new String(filename.getBytes("ISO8859-1"), "UTF-8");
		// 設定頭資訊
		response.setContentType(getServletContext().getMimeType(filename));
		String agent = request.getHeader("User-Agent");
		String filenameEncoder = "";
		if (agent.contains("MSIE")) {
			// IE瀏覽器
			filenameEncoder = URLEncoder.encode(filename, "utf-8");
			filenameEncoder = filename.replace("+", " ");
		} else if (agent.contains("Firefox")) {
			// 火狐瀏覽器
			BASE64Encoder base64Encoder = new BASE64Encoder();
			filenameEncoder = "=?utf-8?B?" + base64Encoder.encode(filename.getBytes("utf-8")) + "?=";
		} else {
			// 其它瀏覽器
			filenameEncoder = URLEncoder.encode(filename, "utf-8");
		}

		response.setHeader("Content-Disposition", "attachment;filename=" + filenameEncoder);
		System.out.println(filename);
		// 獲取檔案的絕對路徑
		String path = getServletContext().getRealPath("/download/" + filename);
		// 獲取該檔案的輸入流
		InputStream is = new FileInputStream(path);
		// 獲取輸出流
		ServletOutputStream os = response.getOutputStream();
		// 檔案拷貝的模板程式碼
		int len = 0;
		byte[] bys = new byte[1024];
		while ((len = is.read(bys)) != -1) {
			os.write(bys, 0, len);
		}
		is.close();
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

下載效果:

相關推薦

下載中文檔案亂碼解決方式

首先我的目錄是:壓縮包即是我要下載的檔案 我的下載介面: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title he

mysql中採用concat來拼接中文字元亂碼解決方式

mysql concat亂碼問題解決 concat(str1,str2) 當concat結果集出現亂碼時,大都是由於連線的欄位型別不同導致,如concat中的欄位引數一個是varchar型別,一個是int型別或doule型別,就會出現亂碼。 解決方法:利用mysql的字串轉換

使用Source Insight時,中文註釋亂碼解決方式

前幾天剛剛下載安裝了Source Insight(一個IDE,可以生成函式呼叫樹狀圖),匯入之前寫好的C檔案發現出現了中文亂碼,以下為我處理問題的步驟:1. 按照網上的很多部落格,在Source Insight中 Options->Preferences->Fil

zuul上傳中文檔案亂碼解決.

專案中用到zuul,不起閘道器上傳檔案不會出現中文亂碼,經過閘道器處理後,中文都變成??.查了好久的解決方案都是在url加字首/zuul來訪問。這樣確實可以解決問題。但是專案很多定義給客戶端訪問的api都已經成型,讓其他客戶端修改訪問的url是不可能的。閘道器這裡將所有帶/

java中中文的文件名下載亂碼解決方式

isp 其中 gets TP ttr 完成後 int lose PE 相信很多人在寫下載文件程序是會遇到很多亂碼的問題,自己也整理了一下,希望可以幫助到大家。 首先要知道各個瀏覽器的編碼格式是不一樣的,下面是一下主流瀏覽器的編碼格式: 各瀏覽器支持的對應編碼格式為: 1.

servlet解決get請求方式下載中文檔案,檔名稱丟失問題

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String filenam

mysql中文亂碼解決方式

方式 sqlserver 查看 fadein tin 方案 tab views 編碼 近期項目使用到mysql。卻突然出現了中文亂碼問題。嘗試了多種方案,最終解決亂碼問題,總結一下解決方式,給遇到同樣問題的人一點參考。 中文亂碼的原因 1.安裝m

關於火狐瀏覽器下載檔案時,中文檔案亂碼問題的處理方案。

//設定要下載的檔案的媒體格式 response.setContentType(this.getServletContext().getMimeType(filename)); //處理中文檔案下載時火狐瀏覽器中文檔名亂碼的問題 //從請求頭中獲取User-Agent判斷當前使用的是否是火狐瀏覽器

IE下get方式中文引數亂碼解決方法

亂碼原因:瀏覽器在傳遞url的時候,會使用自己的編碼格式對地址進行編碼,如果瀏覽器所使用編碼與伺服器採用編碼不一致,伺服器接收到的引數就會出現亂碼。在firefox,chrome下正常,ie下會出現亂碼。 解決方法:使用js encodeURI 對地址進行統一編碼,   &n

在ie瀏覽器下載檔案亂碼解決

String userAgent = requst.getHeader("user-agent").toLowerCase(); if (userAgent.contains("msie") ||

解決struts2 下載中文名稱亂碼問題 適應不同三大主流瀏覽器 chrome28.0.1500.95、 firefox 23.0.1 、 IE11

 最近使用Sturts2作檔案下載時,發現在不同的瀏覽器上會有中文檔名亂碼的問題,現在把解決方法放在這裡,以便留個備份。 struts2配置檔案如下: Xml程式碼   <actionname="fileDownLoad"class="com.test

利用FTPClient上傳的檔案中文名字亂碼解決辦法

新增下面這一段: if (FTPReply.isPositiveCompletion(ftpClient.sendCommand( "OPTS UTF8", "ON"))) {// 開啟伺服器對UTF-8的支援,如果伺服器支援就用UTF-8編碼,否則就使用本地編碼(GBK)

關於爬取資料儲存到json檔案,中文是unicode解決方式

原帖地址: https://www.cnblogs.com/yuyang26/p/7813097.html 流程:  爬取的資料處理為列表,包含字典。裡面包含中文, 經過json.dumps,儲存到json檔案中, 發現裡面的中文顯示未\ue768這樣子 查閱資

Safari瀏覽器顯示PHP檔案中文出現亂碼解決方案

首先應確認PHP程式碼中使用的編碼都是統一的。 <pre name="code" class="php"><?php $conn=mysql_connect("localhost","root","") or die("資料庫伺服器連線錯誤".my

Android讀取xxx.properties配置檔案中文出現亂碼解決方法

android讀取assets中的配置檔案英文沒問題,但是中文會出現亂碼的問題,前提配置檔案已經是utf-8的格式了 出現問題的程式碼: @Override public void s

Java中文亂碼解決方式

//POST請求中文亂碼處理(在獲得引數值之前設定)req.setCharacterEncoding("UTF-8");// GET請求處理中文亂碼 String username = req.getP

徹底解決Moodle上傳檔案中文檔名亂碼解決方法

2 推薦 moodle對中文的支援不是很好,這是公認的BUG。在網上可以找到一些解決辦法,其中最簡單的做法是: ------------------------------- config.php加入$CFG->unicodecleanfilename = true; ==============

appfuse中文配置檔案亂碼解決方法

Appfuse在ant new生成新的app時,拷貝的ApplicationResources_zh_CN.properties($app/web/WEB-INF/classes)有問題,我是直接把原來的那個Applic

SpringCloud 上傳檔案,經過Zuul,中文檔名亂碼解決辦法

網上比較常見的解決方案是在uri前加/zuul 使用zuul的servlet繞開springmvc來解決上傳檔案亂碼問題 比如:原來你上傳檔案的路徑是/api/file/upload, 則你可以通過uri /zuul/api/file/upload來呼叫介面上傳檔案

Python HTTP庫requests中文頁面亂碼解決方案!

獲得 使用 http text odin 抽取 from Coding blog 把html編碼類型賦與獲取到文本 獲取html編碼類型: 1.使用apparent_encoding可以獲得真實編碼 1 >>> response.apparent_enc