再谈Java中关于乱码问题的解决

       在JSP和java的开发中乱码问题有时候是非常让人头疼的,今天朋友就出了这个问题,发来信息让我帮忙看看。其实java开发者都知道,出现乱码问题有 很多种原因,需要具体问题具体分析,从他和我说的配置环境是JSP(视图)+Tomcat(模型)+Servlet(业务处理),在本地的调试环境 (Tomcat+Resin)下出现乱码问题。通常我们使用的编码方式都是为GB2312,因为页面中所有的中文都是乱码,所以通过简单的分析出问题的最 有可能出问题的地方就是JSP视图,其次是业务处理部分部分,作为Bean只是用来存储数据的,不可能出现问题。所以得先从下面几种方式开始检查(我不是 高手,一下看不出根本问题的所在):
第一:
1:在jsp页面加入:  
<%@  page  contentType="text/html;  charset=gb2312"  %>
2.在JSP页面的最上面<%@的下面添加request.setCharacterEncoding("gb2312"),JSP页面接收数据的统一为GB2312编码格式;
3:在servlet里面:  
   public  void  doGet(HttpServletRequest  request,  HttpServletResponse  response)  throws  ServletException,  IOException  {  
       response.setContentType("text/html;  charset=gb2312"); 
4:以上如果还不行就用如下的方法在数据入库前进行调用:
[CODE_LITE]
public static String UnicodeToChinese(String s){
try{
if(s==null ¦ ¦s.equals(“”)) return “”;
String newstring=null;
newstring=new String(s.getBytes(“ISO8859_1″),”gb2312″);
return newstring;
}
catch(UnsupportedEncodingException e)
{
return s;
}
}
public static String ChineseToUnicode(String s){
try{
if(s==null ¦ ¦s.equals(“”)) return “”;
String newstring=null;
newstring=new String(s.getBytes(“gb2312″),”ISO8859_1″);
return newstring;
}
catch(UnsupportedEncodingException e)
{
return s;
}
}
[/CODE_LITE]
第二、朋友用的是MYsql,如果是连接数据库出现乱码问题得先下载mysql jdbc驱动,并解压到JDK目录下的lib文件夹和resin安装目录下的lib目录,当然这时的系统变量CLASSPATH别忘了加上,重启resin,加上连接文件。
第三、以上如果问题任然存在可能就是从数据库中取出来的时候就不是gb2312的编码格式,还有就是Servlet的传输数据的时候出的问题,根据这种情 况先从数据库原因查起,没有看到他的数据库配置,不过如果编码方式为GBK,就没有问题,那么问题就出在Servlet上了,JSP在执行时首先要编译成 Servlet,通过上面的方法可以进行下面的检查:
1.response.setContentType(CONTENT_TYPE),CONTENT_TYPE是一个常量,默认是“text/html; charset=ISO-8859-1”(这里朋友给我的代码中是ISO8859-1,明显是个错误),看来这里是有问题了,应该把“charset=ISO-8859-1”改为“charset=gb2312”;
2.request.setCharacterEncoding("gb2312");在doGet或者doPost方法的最上面是否有这个设置。
通过这些方法朋友解决了他的乱码问题,其实在开发JSP时遇到乱码问题很常见,很多时候是因我们在一些细节上不规范,从而导致不一致,当然这只是乱码问题其中的一个。
BTW:早期的IBM网站有关于乱码问题的资料,这里也贴出来以便大家了解乱码的根本原因,以及下面有关乱码问题的文章一起放上来吧~~~~
 Web应用中的中文乱码问题
* [URL=http://www.javaworld.com.tw/jute/post/view?bid=9&id=44042&st]解决 Tomcat 5.0.19 中文参数传递问题[/URL]
* [URL=http://togetherj.blogdriver.com/togetherj/253018.html]Tomcat中文问题[/URL]
* [URL=http://www.knowsky.com/5352.html]深入剖析JSP和Servlet对中文的处理[/URL]
* [URL=http://www.knowsky.com/list.asp?id=2702]用XMLHTTP Post/Get HTML页面时的中文乱码之完全Script解决方案 [/URL]
* [URL=http://www.javaworld.com.tw/jute/post/view?bid=11&id=57879&sty=1&tpg=1&age=-1]修正上传 attachement file时的中文档名乱码问题[/URL] (修改mvnforum-1.0.0-rc3)
* 深入剖析Java编程中的中文问题及建议最优解决方法

http://dev.csdn.net/article/27/27140.shtm

http://dev.csdn.net/article/27/27142.shtm

* [URL=http://www.chedong.com/tech/hello_unicode.html]Java中文处理学习笔记——Hello Unicode[/URL]
* [URL=http://www-900.ibm.com/developerWorks/cn/java/java_chinese/]Java编程技术中汉字问题的分析及解决 [/URL]
* [URL=http://www-900.ibm.com/developerWorks/cn/java/l-javachinese/index.shtml]关于Java中文问题的几条分析原则[/URL]
* [URL=http://gceclub.sun.com.cn/NASApp/sme/jive/thread.jsp?forum=8&thread=13425]
Java中文问题及最优解决方法[/URL]
Continue reading

AJAX: 怎么处理书签和按钮!

“真正地简单的历史框架包括二个开源Javascript组, DhtmlHistory 与 HistoryStorage. 这两类使AJAX 应用支持按书签自由翻动按钮。
首先,我们将创造一个AJAX 网页应用一系列的题目链接; 当题目被选择, 他们的内容将被装载并且显示在页的右边而没有执行整页刷新:…
Continue reading

Java之Constructor finalize()

[IMG]upload/sun.gif[/IMG]
[B]Constructor[/B]
- 每个class都必须有自己的constructor,它不能从父类中inherited,一个class可以有多个,但至少有一个, 如果没有显示声明构造函数,compiler会提供一个默认的不带参数的构造函数,只要有一个显示声明的constructor,将不会提供default constructor.
- constructor 不可以有返回值,如果有返回值将会被视为一个普通的方法,不过与类同名。但是在constructor里可以写return语句,public Cons(){return;} 这样是允许的。
Continue reading

JAVA学习之Static

[IMG]upload/sun.gif[/IMG]
Static涉及到的有类(static)变量、类(static)方法、静态初始化。
结合[URL=http://www.javaresearch.org/article/showarticle.jsp?column=544&thread=9703]JR中Java中static、this、super、final用法简谈(一)[/URL]这篇文章及《Thinking in java》用一个完整的程序来呈现Static关键字的用法!
Continue reading

JAVA学习之OOP Object Reference

[IMG]upload/sun.gif[/IMG]
对象是一些相关的变量和方法的软件集,对象是理解面向对象技术的关键。现实生活中的对象,比如狗、桌子、电视、自行车等等。你可以发现现实世界中的对象有两个共同特征:它们都有状态和行为。比如狗有自己的状态(比如名字、颜色、以及饥饿等等)和行为(比如摇尾巴等等),而Reference就是提供行为的方法。
[FONT-COLOR=Red]UPDATE:Reference、Static用法。[/FONT-COLOR]
Continue reading

Recent Comments