@duyao
2015-04-23T01:05:25.000000Z
字数 2372
阅读 3006
servlet
发生中文乱码有3种情况
一般浏览器的编码为utf-8,而web服务器(tomcat)为iso-8859-1,因此提交时就会产生乱码,故设置request
request.setCharacterEncoding("utf-8");//gbk,gb2312,big5
对于get方法,内容封装到请求行中,因此设置请求体无效
//将方法写成工具类
//String name=new String(request.getParameter("username").getBytes("iso-8859-1"),"utf-8");
public static String getNewString(String str){
String newString="";
try {
newString= new String(str.getBytes("iso-8859-1"),"utf-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return newString;
}
<a herf="url?name=nameString">test</a>
超链接的传输同get方法相同,因此get的解决方法就可以解决超链接问题
//将方法写成工具类
//String name=new String(request.getParameter("username").getBytes("iso-8859-1"),"utf-8");
public static String getNewString(String str){
String newString="";
try {
newString= new String(str.getBytes("iso-8859-1"),"utf-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return newString;
}
response.sendRedirect("/userManager/MainFrame?name=你好");
//接受时,对responce进行解码
response.setContentType("text/html;charset=utf-8");
String newString=new String(request.getParameter("name").getBytes("iso-8859-1"),"utf-8");
PrintWriter out = response.getWriter();
out.print(newString);
使用URLEncoder.encode
转码报头response.setHeader()
package com.dy.http;
import java.io.*;
import javax.servlet.*;
public class Download extends HttpServlet {
/**
* 演示页面下载功能,使用Content-Disposition关键字
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
//getWriter和getOutputStream不能同时出现
//PrintWriter out = response.getWriter();
//下载文件的报头
//文件名为中文,下载会出现乱码,只需要修改header
String tmp=URLEncoder.encode("图片.jgp","utf-8");
response.setHeader("Content-Disposition", "attachment;filename="+tmp);
//1.获取全路径,路径不需要转码
String path=this.getServletContext().getRealPath("/image/图片.jpg");
//System.out.println(path);
//2.创建文件输入流,这样才可以下载
FileInputStream fis=new FileInputStream(path);
//创建缓冲
byte [] buffer=new byte[1024];
//每次实际读出多少比特
int len=0;
OutputStream os=response.getOutputStream();
while((len=fis.read(buffer))>0){
os.write(buffer, 0, len);
}
//关闭流
os.close();
fis.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
}
尽量使用post提交
在服务器端是中文,也要考虑浏览器是否是中文
response.setContentType("text/html;charset=utf-8");