隨筆-62  評(píng)論-29  文章-0  trackbacks-0

          環(huán)境:
          JDK1.5
          TOMCAT5.0.30
          %TOMCAT_HOME%:F:\Tomcat 5.0
          統(tǒng)一使用utf-8
          一。URL:
          修改%TOMCAT_HOME%\conf\server.xml文件
          找到如下內(nèi)容:
              <Connector
          port="80"               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
                         enableLookups="false" redirectPort="8443" acceptCount="100"
                         debug="0" connectionTimeout="20000"
                         disableUploadTimeout="true" />
          添加:URIEncoding="utf-8"
          修改后內(nèi)容如下:
              <Connector
          port="80"               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
                         enableLookups="false" redirectPort="8443" acceptCount="100"
                         debug="0" connectionTimeout="20000"
                         disableUploadTimeout="true" URIEncoding="utf-8" />

          在客戶段需要對(duì)URL中的中文進(jìn)行編碼
          eg:
          String t=URLEncoder.encode("help中文", "utf8");
          urlString="http://61.144.47.228/sendSeveninfo.do?msisdn=8615602387092&content="+t+"&username=seven&password=seven777";
          URL url = new URL(urlString);
          HttpURLConnection conn = (HttpURLConnection) url.openConnection();
          String coo = conn.getResponseMessage();
             
          在服務(wù)器端用URLDecoder解碼
          String de=URLDecoder.decode(request.getParameter("content"), "utf8");
          String content =  new String(request.getParameter("content").getBytes(),"utf8");
          百度URL用GBK編碼, displaytag 和google用的是utf8編碼.

           

          二。處理表單亂碼:
          用過濾器吧。
          下面是用于處理表單的一個(gè)filter

          package hrl.util.filter;

          import java.io.IOException;

          import javax.servlet.Filter;
          import javax.servlet.FilterChain;
          import javax.servlet.FilterConfig;
          import javax.servlet.ServletException;
          import javax.servlet.ServletRequest;
          import javax.servlet.ServletResponse;

          public class SetCharacterEncodingFilter implements Filter {
              protected String encoding = null;
              protected FilterConfig filterConfig = null;
              protected boolean ignore = true;

              public void init(FilterConfig filterConfig) throws ServletException {
                  this.filterConfig=filterConfig;
                  this.encoding=filterConfig.getInitParameter("encoding");
                  String value=filterConfig.getInitParameter("ignore");
                  if(value==null)
                  this.ignore=true;
                  else if(value.equalsIgnoreCase("true"))
                      this.ignore=true;
                  else
                      this.ignore=false;
              }

              public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
                  // TODO 自動(dòng)生成方法存根
                  if (ignore || (request.getCharacterEncoding() == null)) {
                      String encoding = selectEncoding(request);
                      if (encoding != null){
                          request.setCharacterEncoding(encoding);
                      }else
                          System.out.println("encoding has not set");
                  }
                  chain.doFilter(request, response);
              }

              public void destroy() {
                  // TODO 自動(dòng)生成方法存根
                  this.encoding = null;
                  this.filterConfig = null;
              }

              protected String selectEncoding(ServletRequest request) {
                  return (this.encoding);
              }
          }

          在web.xml里配置此filter,將其影射到所有頁面上
              <filter>
                  <filter-name>encoding filter</filter-name>
                  <filter-class>hrl.util.filter.SetCharacterEncodingFilter</filter-class>
                  <init-param>
                      <param-name>encoding</param-name>
                      <param-value>utf-8</param-value>
                  </init-param>
              </filter>
             
              <filter-mapping>
                  <filter-name>encoding filter</filter-name>
                  <url-pattern>/*</url-pattern>
              </filter-mapping>

          三。處理jsp&servlet頁面顯示亂碼
          JSP中:
          最頂端加入如下代碼:
          <%@ page language="java" contentType="text/html;charset=utf-8"%>
          關(guān)鍵:charset=gb2312
          servlet中:
          在doGet 或doPost方法中加入如下代碼:
          response.setCharacterEncoding("utf-8");

          四。處理文件下載時(shí)提示保存文件名亂碼的解決方法
          在處理下載的JSP或servlet里修改響應(yīng)頭部如下:
          response.setContentType("application/octet-stream;charset=utf8");
          將文件名進(jìn)行編碼轉(zhuǎn)換:
          response.addHeader("Content-Disposition","attachment;filename="+hrl.util.text.DealString.toUtf8String(file.getName())+"\"");
          DealString類的toUtf8String方法如下:
              public static String toUtf8String(String src)
              {
                  byte[] b = src.getBytes();
                  char[] c = new char[b.length];
                  for(int i=0;i<b.length;i++)
                  {
                      c[i] = (char)(b[i]&0x00FF);
                  }
                  return new String(c);
              }
          五。讀取properties文件時(shí)出現(xiàn)亂碼
          如果properties文件里含有中文時(shí)不可以用ResourceBundle度取,需先對(duì)properties文件進(jìn)行編碼轉(zhuǎn)換
          在JDK中提供了native2ascii命令 他能夠?qū)崿F(xiàn)字符編碼的轉(zhuǎn)換。
          假設(shè)message.properties 文件在目錄WEB-INF/resource目錄下
          在命令行模式下進(jìn)入WEB-INF/resource目錄,然后執(zhí)行如下命令
          native2ascii –encoding utf-8 message.properties message_zh_CN.properties
          參數(shù)-encoding表示要轉(zhuǎn)換成的編碼格式
          執(zhí)行以上命令以后將生成message_zh_CN.properties文件 現(xiàn)在就可以用ResourceBundle類進(jìn)行讀取了

          也可以通過制定讀取文件的編碼格式來讀取文件
          isReader = new InputStreamReader(is,GlobalConst.STR_ENCODE_GBK);
          bufferedReader = new BufferedReader(isReader);
          while ((strLine = bufferedReader.readLine()) != null) {
          ..........
           }

          六。AJAX亂碼
          在向服務(wù)器傳參前用函數(shù)encodeURIComponent(String str)對(duì)參數(shù)進(jìn)行編碼
          七。數(shù)據(jù)庫編碼
          拿MySQL舉例
          在建表和建庫時(shí)限定編碼格式:
          eg: CREATE database <庫> CHARACTER SET UTF8
          create table <表>(
                 .........
          )engine=InnoDB character set utf8;

          文章出處:http://www.diybl.com/course/3_program/java/javaxl/200861/118552_2.html

           



          posted on 2008-12-11 17:37 閱讀(3123) 評(píng)論(0)  編輯  收藏

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 垫江县| 视频| 琼中| 元谋县| 宁波市| 绵阳市| 洪泽县| 江安县| 南涧| 富锦市| 武城县| 沁阳市| 洪泽县| 樟树市| 昆山市| 萍乡市| 遂川县| 明溪县| 哈尔滨市| 奈曼旗| 永和县| 芮城县| 焉耆| 广昌县| 沛县| 大竹县| 榆社县| 得荣县| 中阳县| 永兴县| 肥乡县| 四会市| 博客| 双鸭山市| 惠东县| 巩留县| 华安县| 五莲县| 平果县| 德阳市| 溆浦县|