为了不让自己忘记,在此写一篇关于解决servlet中文编码的文档

来源:互联网 发布:淘宝幸运抽奖设置 编辑:程序博客网 时间:2024/06/05 18:13

在创建的servlet中的doget方法中写入

public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
response.setCharacterEncoding("utf-8");//设置编码为utf-8
PrintWriter pw= response.getWriter();//创建PrintWriter对象
String name =  request.getParameter("name");//从html页面中获取属性name为"name"的值,具体内容为:<input name="name" type="text">
String sex = request.getParameter("sex");//同上 具体内容为:<input name="sex" type="radio" value="男" > 
String suggest = request.getParameter("suggest");//同上 具体内容为:<textarea name="suggest" cols="38" row="10">
String [] interest = request.getParameterValues("interest");///复选框,获取的可能是数组
//开始打印到页面
pw.println("姓名"+name);
pw.println("性别"+sex);
pw.print("兴趣");
for(String xq:interest){
pw.print(xq+"&nbsp;&nbsp");
}
pw.println("个人简介:"+suggest);
}

注释在后面。

得到的结果是 姓名都是 性别女 兴趣阅读  çœ‹ç”µå½±  个人简介:大神

将request.getParameter("name")改成new String(request.getParameter("name").getBytes("iso-8859-1"),"utf-8");

意思就是在将request.getprarmeter("name")先转换成byte,设置他的编码为utf-8,默认编码是iso-8859-1,再将其设置成String。String [] interest = request.getParameterValues("interest");】是一个数组,所以在for循环的时候使用.getBytes("iso-8859-1")。具体为

for(String xq:interest){
xq=new String(xq.getBytes("iso-8859-1"),"utf-8");
pw.print(xq+"&nbsp;&nbsp");
}

然后照常输出,就不会乱码了。

补充:
刚发现一个更简便的方法。好像是可以在jsp里面最上面的一行代码
<%@ page language="java" import="java.util.*" pageEncoding="iso-8859-1"%>
的pageEncoding的值修改为GBK
入果觉得我最开始说的方法麻烦可以用此方法

0 0
原创粉丝点击