加载中…
个人资料
戰鬥的蝸牛
戰鬥的蝸牛
  • 博客等级:
  • 博客积分:0
  • 博客访问:16,870
  • 关注人气:2
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

request.getParameter("user")出乱码问题

(2010-07-22 15:52:31)
标签:

request乱码

jsp乱码

分类: 网页设计

实习阶段编写了一个简单的get方法,没想到一个乱码的问题让我这个菜鸟忙活了大半天。还好,最终把问题解决了。下面是这段代码:

package com.lqx;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class WelcomeServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException,IOException {

        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();

        String user = request.getParameter("user");
        //String user = new String(request.getParameter("user").getBytes("ISO8859_1"),"UTF-8");
        String msg = "你好 " + user + ",欢迎登录";
        out.println(msg);
        out.close();
    }
}

上面这段程序运行时,输入英文是正常显示,但是输入中文时就出错,为什么?我猜想是字符流和字节流转换时出问题了,我查阅了很多资料,最终找到了比较好的解决方法。

http请求是以ISO-8859-1的编码来传送url的,如果页面的content-type为utf-8,那么在发送请求时,会将字符转成utf-8后进行传送.
这样服务器收到字节流后,将它转成相应的字符,request.getParameter("user")直接得到了字符串,从字节流到字符流的转换系统帮我们做了(这就是错误来源)。

一个字符串以什么样的编码转换成字节流,就必须以什么样的编码进行还原.因此,先把它还原成ISO8859_1的编码方式,再按照我们的方式编码,就不会出现乱码了。
于是就有了上面注释起来的那个代码的解决方案:

String name = new String(request.getParameter("user").getBytes("ISO8859_1"),"UTF-8");

String name = new String(request.getParameter("user").getBytes("ISO8859_1"),"GBK");

后面的根据charset的声明来该,如果是GBK,就改成相应的就可以了。

如果是第一个页面输入信息提交到第二个页面显示

在第二个页面开始的时候<%@ page contentType="text/html; charset=gb2312" %>

将里面的charset改为charset=ISO8859_1即可。

 

与人方便,自己方便!

 

 

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有