在调用request.getParameter()之前调用request.setEncoding(String encode)函数名好像错了,具体记不清了,他的功能是设置编码,你到文档中查一下,将它设置成gb2312就万事大吉了

解决方案 »

  1.   

    读(显示)
    如果是为了在jsp中显示数据库中的内容,只需要使jsp的charset=UTF-8就ok了。
    如果是对于静态的html中如果有文字,显示出来的就是乱码啊。因为这些我们直接写的文字进行unicode编码后就是乱码了,解决办法是:
    1 在jsp文件中直接写unicode的中文,比如“宠物”显示在jsp编辑工具中就是这样的“瀹犵墿”
    2使用类似struts中message的办法来显示静态的文字。另外我发现了一个使我感到奇怪的问题,使用了struts的message以后,jsp的charset无论是使用gb2312还是UTF-8都可以显示正常的中文,这是怎么回事呢?后来才明白原来struts的字典文件中存的是代表unicode的16进制的ANSI代码,比如“hello,世界”在字典文件中是“hello,\u4e16\u754c”,而无论用何种方式编码,ANSI码的是大家一样的。

    1如果jsp中有个text框,我要将text框中的内容写到数据中去,那么要求
    1.1 jsp的charset是UTF-8
    1.2 requset的内容用UTF-8编码,也就是将filter的编码设为UTF-8就可以了。
    那么,这里我可不可不要第二步,不可以,但理解还不深刻;
    那么,可不可以在第一步中用gb2312,不可以,因为如果用gb2312,request中的内容在setCharacterEncoding之前就已经不对了,编目方式设对了也没用了。
    2我是直接将一个字符串”宠物”写到数据库中去,那么该如何处理呢。
    如果是在servlet中,可以直接new String ("宠物");然后用一个sql语句写到数据库中去。
    如果是在jsp中,又如果jsp的charset是UTF-8的话,那么要new String("瀹犵墿");
    又如果jsp的charset是gb2312的话,那么也是new String ("宠物");就可以了
    一般来说2这种情况是很少的
    这又是怎么回事呢?这是因为jsp是要解释为servlet的,而且解释的时候是使用的unicode编码,如果charset是UTF-8,又是new String ("宠物");那么servlet中就变成了:
    response.setContentType("text/html; charset=UTF-8");

    new String ("锟斤拷锟斤拷");//这就不对了
    response.setContentType("text/html; charset=gb2312")

    new String ("瀹犵墿");//这回对了
    总结,如果使用unicode
    1 jsp页面中charset用UTF-8
    2 过滤器用UTF-8
    3 页面中的静态文字内容用message配合字典来显示
    4 数据库的读写不需要特别的处理
    总之,现在对java中的unicode问题总算是基本搞懂了,这是一件大好事,因为最近我们的项目用unicode作数据库的编码方式,顺势学习,真是爽啊