web中解決亂碼問題&&重定向和請求轉發區別
阿新 • • 發佈:2019-02-08
String ss = "珍珍";
String s8 = URLEncoder.encode(ss, "utf-8");
String so = URLDecoder.decode(s8, "iso8859-1");
byte[] bs = so.getBytes("iso-8859-1");
String _s = new String(bs, "utf-8");
System.out.println(s);
通用方式:
String username = request.getParameter("username" );
username = new String(username.getBytes("iso8859-1"), "utf-8");
- 針對post請求來說,只需要將請求流的編碼設定成utf-8
request.setCharacterEncoding("utf-8");
小結
URLEncoder.encode(s,"utf-8");//指定編碼
URLDecoder.decode(s8,"iso8859-1");//指定解碼
擴充套件上文的檔案下載:會有中文名稱下載出問題
- 中文名稱的檔名下載的時候名稱會出現問題
- 常見的瀏覽器需要提供檔名稱的utf-8編碼
- 對於火狐來說需要提供檔名稱的base64編碼
//設定下載的頭資訊,將檔名稱 是喲見你utf-8
response.setHeader("content-disposition", "attchment;filename="+URLEncoder.encode(filename,"utf-8"));
以上是通用的 但是不相容火狐
- 通過工具類
//檔案下載的工具類
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import sun.misc.BASE64Encoder;
public class DownLoadUtils {
public static String getName(String agent, String filename) throws UnsupportedEncodingException {
if (agent.contains("MSIE")) {
// IE瀏覽器
filename = URLEncoder.encode(filename, "utf-8");
filename = filename.replace("+", " ");
} 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");
}
return filename;
}
}
- 通過工具類編碼程式碼修改如下:
//通過工具類修改編碼
String _filename=DownLoadUtils.getName(request.getHeader("user-agent"),filename);
response.setHeader("content.disposition","attchment;filename"+_filename);
- 網上的方式
response.setHeader("content-disposition","attachment;filename="+new String(filename.getBytesk("gbk"),"ios8859-1"));
重定向和請求轉發區別