主要分response的字節(jié)字符輸出流和request接受中文參數(shù)doGet(),doPost()的設(shè)置四種.以及從服務(wù)器下載文件到瀏覽器的編碼問(wèn)題.
創(chuàng)新互聯(lián)公司憑借在網(wǎng)站建設(shè)、網(wǎng)站推廣領(lǐng)域領(lǐng)先的技術(shù)能力和多年的行業(yè)經(jīng)驗(yàn),為客戶提供超值的營(yíng)銷型網(wǎng)站建設(shè)服務(wù),我們始終認(rèn)為:好的營(yíng)銷型網(wǎng)站就是好的業(yè)務(wù)員。我們已成功為企業(yè)單位、個(gè)人等客戶提供了網(wǎng)站制作、成都網(wǎng)站制作服務(wù),以良好的商業(yè)信譽(yù),完善的服務(wù)及深厚的技術(shù)力量處于同行領(lǐng)先地位。
都是我學(xué)習(xí)java時(shí)總結(jié)的,希望能幫到你.
response的字節(jié)輸出流:
// 設(shè)置瀏覽器默認(rèn)打開(kāi)的時(shí)候采用的字符集編碼
response.setHeader("Content-Type", "text/html;charset=UTF-8");
// 設(shè)置中文轉(zhuǎn)成字節(jié)數(shù)組的時(shí)候取出的編碼
response.getOutputStream().write("如果不設(shè)置編碼,這里就是亂碼".getBytes("UTF-8"));
response的字符輸出流:
//設(shè)置瀏覽器默認(rèn)打開(kāi)的時(shí)候采用的字符集編碼,response的字符流的緩沖區(qū)的編碼.
response.setContentType("text/html;charset=UTF-8");
response.getWriter().println("中文");
request的doGet()編碼解決:
String name = new String(request.getParameter("name").getBytes("ISO-8859-1"),"UTF-8");
System.out.println("GET方式:"+name);
request的doPost()編碼解決:
request.setCharacterEncoding("UTF-8");
String name = request.getParameter("name");
System.out.println("POST方式:"+name);
下載文件時(shí)瀏覽器編碼問(wèn)題:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1.接收參數(shù)
String filename = new String(request.getParameter("filename").getBytes("ISO-8859-1"),"UTF-8");
System.out.println(filename);
// 2.完成文件下載:
// 2.1設(shè)置Content-Type頭(獲取文件的mime類型)
String type = this.getServletContext().getMimeType(filename);
//設(shè)置文件的mime類型
response.setHeader("Content-Type", type);
// 2.3web項(xiàng)目文件的絕對(duì)路徑
String realPath = this.getServletContext().getRealPath("/download/"+filename);
// 獲得瀏覽器的類型處理中文文件的亂碼問(wèn)題.(User-Agent:服務(wù)器收到客戶端版本之類的一些信息)
String agent = request.getHeader("User-Agent");
System.out.println(agent);
if(agent.contains("Firefox")){
filename = base64EncodeFileName(filename);
}else{
//IE谷歌編碼
filename = URLEncoder.encode(filename,"UTF-8");
}
// 2.2設(shè)置Content-Disposition頭(固定寫(xiě)法,讓瀏覽器必須下載,不能直接打開(kāi))
response.setHeader("Content-Disposition", "attachment;filename="+filename);
//獲得文件
InputStream is = new FileInputStream(realPath);
// 獲得response指定的方法獲取輸出流:如果用其他流是直接拷貝而不是下載
OutputStream os = response.getOutputStream();
int len = 0;
byte[] b = new byte[1024];
while((len = is.read(b))!= -1){
os.write(b, 0, len);
}
//響應(yīng)流可以不關(guān),在服務(wù)器做出相應(yīng)后服務(wù)器會(huì)自動(dòng)把response獲得的流關(guān)閉
is.close();
}
//火狐
public static String base64EncodeFileName(String fileName) {
BASE64Encoder base64Encoder = new BASE64Encoder();
try {
return "=?UTF-8?B?"
+ new String(base64Encoder.encode(fileName
.getBytes("UTF-8"))) + "?=";
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
如果是修改文件的編碼方式,可以按以下步驟:
選中文件右鍵--Properties--Resource--Text file encoding--選中Other,然后選擇自己想要的編碼格式就可以了。
如果是修改MyEclipse的編碼方式,可以按以下步驟:
菜單欄的Window--Perferences--General--Work Space--Text file encoding--選中Other,然后選擇自己想要的編碼格式就可以了。
不寫(xiě)代碼的話可以直接找個(gè)批量轉(zhuǎn)換文本編碼的軟件搞定。
寫(xiě)代碼稍微復(fù)雜一些。
新建一個(gè)目錄
遍歷遞歸原工程目錄,以gbk編碼讀取,以u(píng)tf8編碼寫(xiě)文件到新的目錄下即可。
手動(dòng)重命名工程為 工程備份
手動(dòng)重命名新目錄為 工程名
檢查無(wú)誤后刪除工程備份