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"%>

<% 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”     完整的应如下:     <Connector       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);   }

后台java中获得的reportId是乱码,不知道该怎么转,主要是不知道xmlHttp.send(urlmsg);以后是什么编码?在后面用java来转,试了几种,都没有成功,其中有:

代码 public static String UTF_8ToGBK(String str) {           try {               return new String(str.getBytes("UTF-8"), "GBK");           } catch (Exception ex) {               return null;           }       }       public static String UTF8ToGBK(String str) {           try {               return new String(str.getBytes("UTF-16BE"), "GBK");           } catch (Exception ex) {               return null;           }       }       public static String GBK(String str) {           try {               return new String(str.getBytes("GBK"),"GBK");           } catch (Exception ex) {               return null;           }       }            public static String getStr(String str) {           try {               String temp_p = str;               String temp = new String(temp_p.getBytes("ISO8859_1"), "GBK");               temp = sqlStrchop(temp);               return temp;           } catch (Exception e) {               return null;           }       }

4、JDBC ODBC Bridge的Bug及其解决方法

放下一处烦恼,收获一个惊喜;放下一种偏见,收获一种幸福;

Java 关于中文乱码处理的经验总结【转载】

相关文章:

你感兴趣的文章:

标签云: