@duyao
2015-04-23T01:05:25.000000Z
字数 2372
阅读 3045
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 blocke.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 blocke.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();//下载文件的报头//文件名为中文,下载会出现乱码,只需要修改headerString 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");