1.response對象:
向頁面輸出中文(亂碼問題)
字節:ServletOutputStream getOutputStream() 字節輸出流
* 字節的輸出中文的亂碼
* * 輸出哈羅我的是否亂碼呢?
* * 不一定亂碼。
* * 解決辦法
* * 設置瀏覽器打開文件時所採用的編碼
* response.setHeader("Content-Type", "text/html;charset=UTF-8");
* * 獲取字符串byte數組時編碼和打開文件時編碼一致。
* "哈羅我的".getBytes("UTF-8")
PrintWriter getWriter() 字符輸出流
* 字符輸出中文是否亂碼呢?
* * 肯定亂碼
* response緩衝區的編碼,默認值ISO-8859-1
* * 設置response緩衝編碼
* response.setCharacterEncoding("UTF-8");
* * 設置瀏覽器打開文件所採用的編碼
* response.setHeader("Content-Type", "text/html;charset=UTF-8");
* * 簡寫方式
* response.setContentType("text/html;charset=UTF-8");
* 總結:response對象輸出中文,產生亂碼。
* 字節
* 解決方案
* 設置瀏覽器打開文件時採用的編碼
response.setHeader("Content-Type", "text/html;charset=UTF-8");
// 獲取字節輸出流
OutputStream os = response.getOutputStream();
// 輸出中文* 獲取字符串的byte數組採用的編碼
os.write("哈羅我的".getBytes("UTF-8"));
* 字符
* 解決方法
* 設置瀏覽器打開文件時採用的編碼
response.setHeader("Content-Type", "text/html;charset=UTF-8");
* 設置response緩衝區的編碼
response.setCharacterEncoding("UTF-8");
* 簡寫的方式(等於上面的兩句)
* response.setContentType("text/html;charset=UTF-8");
2.request對象
亂碼問題解決:
* POST請求亂碼 :request.setCharacterEncoding("utf-8");
* GET請求亂碼
解決方案一:修改tomcat/conf/server.xml
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="utf-8"/>
* 必須有修改tomcat服務器配置文件權限
解決方案二:逆向編解碼
username = URLEncoder.encode(username, "ISO8859-1");
username = URLDecoder.decode(username, "utf-8");
解決方案三:簡寫的方式(推薦使用)
username = new String(username.getBytes("ISO-8859-1"),"utf-8");
* request獲取中文數據亂碼(總結:)
* post提交
* 設置request緩衝區的編碼
request.setCharacterEncoding("utf-8");
* get提交
* String構造方法
username = new String(username.getBytes("ISO-8859-1"),"utf-8");
3.文件上傳的亂碼問題
關於文件上傳時的亂碼問題:
1.上傳文件名稱亂碼
ServletFileUpload.setHeaderEncoding("utf-8");
2.非上傳組件內容亂碼
FileItem.getString("utf-8");
3.上傳文件信息是否會亂碼,需要解決嗎?
不需要解決,因爲我們在上傳時,使用的字節流來進行復制。
4.文件下載時的亂碼問題
1.關於下載時中文名稱資源查找不到
原因:<a href='${pageContext.request.contextPath}/download?filename=天空.mp3'>天空.mp3</a>
這是get請求。
在服務器端:
String filename = request.getParameter("filename");
解決: new String(filename.getBytes("iso8859-1"),"utf-8");
2.下載文件顯示時的中文亂碼問題
response.setHeader("content-disposition", "attachment;filename="+filename);
IE:要求filename必須是utf-8碼
firefox:要求filename必須是base64編碼.
問題:怎樣判斷瀏覽器?
String agent=request.getHeader("user-agent");
if (agent.contains("MSIE")) {
// IE瀏覽器
filename = URLEncoder.encode(filename, "utf-8");
} else if (agent.contains("Firefox")) {
// 火狐瀏覽器
BASE64Encoder base64Encoder = new BASE64Encoder();
filename = "=?utf-8?B?"
+ base64Encoder.encode(filename.getBytes("utf-8"))
+ "?=";
}else {
// 其它瀏覽器
filename = URLEncoder.encode(filename, "utf-8");
}