1. 程式人生 > >web中解決亂碼問題&&重定向和請求轉發區別

web中解決亂碼問題&&重定向和請求轉發區別

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

重定向和請求轉發區別
這裡寫圖片描述