解析Java中文乱码的处理方法

 

  • 本文作者总结了自己几年来在Java开发中遇到的各种各样的中文乱码的解决方法,与大家共享。

 

【引自程序犹如人生的博客】为什么说乱码是中国程序员无法避免的话题呢?这个首先要从编码机制上说起,大家都是中文和英文的编码格式不是一样,解码也是不一样的!如果中国的程序员不会遇到乱码,那么只有使用汉语编程。汉语编程是怎么回事,我也不大清楚,应该是前年吧!我一朋友给我介绍汉语编程,怎么不错不错?当时因为学习忙没去关注这个,等我闲了,那个朋友不弄这个,问他,他也不说不大清楚,最后自己对这个学习也不了了之了。

我写这个不是讲解中英文之间的差距,解码等,我是将我在这几年工作遇到各种各样的乱码的解决方法,总结起来,也希望大家能把自己晕倒解决乱码的方法都说出来,咱们弄一个解决乱码的“葵花宝典”。

对于Java,由于默认的编码方式是UNICODE,所以用中文也易出问题,常见的解决是:

 

String s2 = new String(s1.getBytes(“ISO-8859-1”),”GBK”);

 

1、utf8解决JSP中文乱码问题

一般说来在每个页面的开始处,加入:

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>

<%
request.setCharacterEncoding("UTF-8");
%>

 

◆charset=UTF-8的作用是指定JSP向客户端输出的编码方式为“UTF-8”;
◆pageEncoding="UTF-8",为了让JSP引擎能正确地解码含有中文字符的JSP页面,这在LINUX中很有效;
◆request.setCharacterEncoding("UTF-8");是对请求进行了中文编码。

 

有时,这样仍不能解决问题,还需要这样处理一下:

 

String msg = request.getParameter("message");
String str=new String(msg.getBytes("ISO-8859-1"),"UTF-8");
out.println(st);

 

2、Tomcat 5.5中文乱码

只要把%TOMCAT安装目录%/   webapps\servlets-examples\WEB-INF\classes\filters\SetCharacterEncodingFilter.class文件拷到你的webapp目录/filters下,如果没有filters目录,就创建一个。  

2)在你的web.xml里加入如下几行:

 

  <filter>   
<filter-name>Set   Character   Encoding</filter-name>  
<filter-class>filters.SetCharacterEncodingFilter</filter-class>  
<init-param>  
<param-name>encoding</param-name>  
<param-value>GBK</param-value>  
</init-param>  
</filter>  
<filter-mapping>  
<filter-name>Set   Character   Encoding</filter-name>  
<url-pattern>/*</url-pattern>  
</filter-mapping>

 

3)完成

2、get方式的解决办法

1)打开tomcat的server.xml文件,找到区块,加入如下一行:  

 

  URIEncoding=”GBK”

 

完整的应如下:

 

  port="80"   maxThreads="150"   minSpareThreads="25"   maxSpareThreads="75"   
enableLookups="false"   redirectPort="8443"   acceptCount="100"  
debug="0"   connectionTimeout="20000"    
disableUploadTimeout="true"    
URIEncoding="GBK"  
/>

 

2)重启tomcat,一切OK。

3、xmlHttpRequest中文问题

页面jsp用的GBK编码

代码:

 

<%@ page contentType="text/html; charset=GBK"%>
javascript部分

 

代码:

 

function addFracasReport() {   
var url="controler?actionId=0_06_03_01&actionFlag=0010";  
var urlmsg="&reportId="+fracasReport1.textReportId.value;  //故障报告表编号  

var xmlHttp=Common.createXMLHttpRequest();  
xmlHttp.onreadystatechange = Common.getReadyStateHandler(xmlHttp,
       eval("turnAnalyPage"));   
xmlHttp.open("POST",url,true);  
xmlHttp.setRequestHeader( " Content-Type " , "
       application/x-www-form-urlencoded);   
xmlHttp.send(urlmsg);         
}


 


要了解更多请上转载URL:http://developer.51cto.com/art/200708/53612.htm

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章