• jsp连接数据库的乱码问题 servlet请求参数编码处理get post


    1.在所有需要读取数据的地方用下面的方式。同时jsp必须统一编码,如我都是UTF-8

    String userName= new String(request.getParameter("userName").getBytes("ISO-8859-1"),"utf-8");

    插入数据库的也需要先转换再插入。

    上面句子的意思是:把name的值用“ISO-8859-1”字符集获取他的字节,“name.getBytes("ISO-8859-1")”这里面返回的是一个ISO-8859-1的字节数组,最后创建一个String对象,在把它赋值给name;

    即就是字符编码转换,把字符集转换成用UTF-8编码的字节码。

    ISO-8859-1:是国际字符集之一,比如我们常用的UTF-8和GBK等都是的。

    2 上面之所以能解决的原理是:一般浏览器使用的是uTF-8处理字符(可通过网页右击--编码来查看),而WEB容器默认使用ISO-8859-1编码。

    这样的话客户端使用UTF-8发送非ASCII字符的请求参数(如果请求参数是ASCII字符,没什么问题,因为都是按一个字节的编码处理,是兼容的,但是中文不同编码方式处理不同),servlet直接使用getParameter()等方法取得该请求参数时就会乱码。

    举例,假设网页编码是UTF-8,通过窗体使用post发送“林”这个这个中文字符,相当于浏览器做了这个操作:

    String text =java.net.URLEncoder.encode("林" ,“UTF-8”);(编码后为%e6%9e%97)

    在Servlet 中取得请求参数时,容器默认使用ISO-8859-1来处理编码,相当于做了这个操作:

    String text =java.net.URLEncoder.decode("%e6%9e%97" ,“ISO-8859-1”);自然显示的就不对了。

    那该怎么办呢?

    下面是servlet的get请求和post请求的不同处理:

    jsp文件统一都是UTF-8

    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            // TODO Auto-generated method stub
            //get处理编码的方式
            String name = req.getParameter("username");
            name = new String (name.getBytes("ISO-8859-1"),"UTF-8"); //合在一起就是String name= new String(request.getParameter("username").getBytes("ISO-8859-1"),"utf-8");
    .....
    }
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            // TODO Auto-generated method stub
            //post处理编码的方式
            req.setCharacterEncoding("UTF-8");
            String name = req.getParameter("username");
    。。。。
    }

    2 sql server 2008数据库默认是GBK编码。

    查看SQLserver编码格式的SQL语句 :

    SELECT  COLLATIONPROPERTY('Chinese_PRC_Stroke_CI_AI_KS_WS', 'CodePage')
    下面是查询结果:
    936 简体中文GBK
    950 繁体中文BIG5
    437 美国/加拿大英语
    932 日文
    949 韩文
    866 俄文
    65001 unicode UFT-8

    默认都是936即 简体中文GBK

  • 相关阅读:
    如何规范自己的编程以及软件开发目录(二)
    关于README的内容
    关于编程编程规范以及开发目录的规范性
    第五章:条件、循环以及其他语句(上)
    第四章 当索引行不通时
    python-zipfile模块
    python-shutil模块
    python-sys模块
    python-os模块
    python-threading.Thread(多线程)
  • 原文地址:https://www.cnblogs.com/Yogurshine/p/3147335.html
Copyright © 2020-2023  润新知