再谈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]

       在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]

One Response to “再谈Java中关于乱码问题的解决”

  1. Gravatar Icon funcreal Says:

    JSP(视图)+Tomcat(模型)+Servlet(业务处理)
    tomcat怎么会是模型?你mvc概念还没搞清楚吧

Leave a Reply