posts - 25,  comments - 25,  trackbacks - 0

          瀏覽器的亂碼問題解決(轉(zhuǎn)載)

          發(fā)表人:zhanxj | 發(fā)表時間: 2005年二月17日, 13:41

          ???? 好不容易搭建起Web服務(wù)平臺,卻發(fā)現(xiàn)瀏覽的時候出現(xiàn)亂碼,手動調(diào)整著實麻煩,如何解決這種不愉快的問題呢?下面的這篇文章從方方面面的情況給予了解答,確實是一篇精彩的文章!
          (1)服務(wù)器端:
          修改httpd.conf (在Redhat中放置的位置為/etc/httpd/conf/)
          查找:
          AddDefaultCharset ISO-8859-1
          改成:
          代碼:
          #AddDefaultCharset ISO-8859-1
          AddDefaultCharset off
          這種方式關(guān)掉了服務(wù)器的默認語言的發(fā)送,這樣僅憑html文件頭中設(shè)置的語言來決定網(wǎng)頁語言。
          很多文章都說通過修改為 AddDefaultCharset GB2312 把缺省語言改成GB2312來解決中文亂碼,確實GB2312內(nèi)碼的網(wǎng)頁可以正常顯示了,但這并非萬全之策。因為當你的網(wǎng)頁內(nèi)碼不是GB2312,就算你在網(wǎng)頁用下面的meta指定了正確的語言,如ISO8859-1,也不會解碼為ISO8859-1,因為Apache已經(jīng)先你一步將GB2312指定為網(wǎng)頁的語言了,

          (2)養(yǎng)成良好的習慣,在每個網(wǎng)頁的的最前面加入這行:
          代碼:

            一般的中文版網(wǎng)頁編輯工具(例如FrontPage、Dreamweaver等)都會自動加上這行。

          (3)、如何解決中文文件名無法訪問
          代碼:
           在ie中選擇 工具 -> internet選項 -> 高級 -> 取消“總是以UTF-8發(fā)送URL”。
          UTF-8網(wǎng)頁空白,在網(wǎng)頁中加上metadata標識后,還需要手動調(diào)整編碼為 utf-8 才能正常顯示
          如果使用的是Mozilla、Mozilla Firefox、Sarafi等其他目前流行的瀏覽器,通常就不會有這樣的問題。
          在網(wǎng)頁的meta中指定用UTF-8:
          代碼:

          在之前,把"Content-Type"放在最前面,便可以解決這樣的問題了。
          原因:
          IE 解析網(wǎng)頁編碼時是 HTML 內(nèi)的標識優(yōu)先的,然后是 HTTP header ;而mozilla 系列的瀏覽器剛剛好相反。
          一般情況在,很多人是把排在最前面,并且在title中就出現(xiàn)了UTF-8中文,這樣, IE在解析時,就先遇到UTF-8,不往下解析了,因此必須把如果把meta放在UTF-8出現(xiàn)之前,這樣IE才能判斷這個網(wǎng)頁是以UTF-8編碼的。
          總之:
          無論是 PHP、JSP、ASP 或其他動態(tài)網(wǎng)頁的腳本語言,如果需要作編碼設(shè)定,最好放在最前面。
          使用php,也可以定義php的默認語言.
          php.ini中:
          代碼:
          default_charset = "gb2312"
          釋掉此行,做了以上修改,一樣是為了讓瀏覽器根據(jù)網(wǎng)頁頭中的charset來自動選擇語言,這樣就可以在同臺服務(wù)器上提供多種語言的網(wǎng)頁服務(wù)。

          java中文亂碼的解決

          在基于JAVA的編程中,經(jīng)常會碰到漢字的處里及顯示的問題,比如一大堆亂碼或問號。
          這是因為JAVA中默認的編碼方式是UNICODE,而中國人通常使用的文件和DB都是基于GB2312或者BIG5等編碼,故會出現(xiàn)此問題。
          1、在網(wǎng)頁中輸出中文。
          JAVA在網(wǎng)絡(luò)傳輸中使用的編碼是"ISO-8859-1",故在輸出時需要進行轉(zhuǎn)化,如:
          String str="中文";
          str=new String(str.getBytes("GB2312"),"8859_1");
          但如果在編譯程序時,使用的編碼是“GB2312”,且在中文平臺上運行此程序,不會出現(xiàn)此問題,一定要注意。
          2、從參數(shù)中讀取中文
          這正好與在網(wǎng)頁中輸出相反如:
          str=new String(str.getBytes("8859_1"),"GB2312");
          3、操作DB中的中文問題
          一個較簡單的方法是:在“控制面扳”中,把“區(qū)域”設(shè)置為“英語(美國)”。如果還會出現(xiàn)亂碼,還可進行如下設(shè)置:
          取中文時:str=new String(str.getBytes("GB2312"));
          向DB中輸入中文:str=new String(str.getBytes("ISO-8859-1"));
          4、在JSP中的中文解決:
          在“控制面扳”中,把“區(qū)域”設(shè)置為“英語(美國)”.
          在JSP頁面中加入:
          如果還不行正常顯示,則還要進行下面的轉(zhuǎn)換:
          如:name=new String(name.getBytes("ISO-8859-1"),"GBK");
          就不會出現(xiàn)中文問題了。


          CGI:
          找到CGI.pm,找到$self->charset('ISO-8859-1');將它改為$self->charset('GB2312');



          補充:
          如果使用php,也可以定義php的默認語言.
          php.ini中:
          ;default_charset = "gb2312"
          注意這里是注釋掉此行,做了以上修改,目的是為讓瀏覽器根據(jù)網(wǎng)頁頭中的charset來自動選擇語言,這樣就可以在同臺服務(wù)器上提供多種語言的網(wǎng)頁服務(wù)。





          徹底解決Tomcat 5.0.19中文亂碼
            一、Include的頁面亂碼
            現(xiàn)象:include進來的頁面出現(xiàn)亂碼,其它頁面正常。
            原因:Tomcat在缺省情況下使用ISO-8859-1編碼,但是在include時有時Tomcat不能正確根據(jù)外層.jsp文件的編碼解析include進來的文件,造成include進來的文件中的中文亂碼。
            解決:這兒可以有很多解決辦法,但是對于我們的中文環(huán)境,從根本上的解決辦法是將Tomcat 5.0.19的核心缺省編碼從ISO-8859-1修改為GBK
            二、提交的數(shù)據(jù)亂碼
            現(xiàn)象:通過表單提交的數(shù)據(jù)出現(xiàn)亂碼。
            原因:原因未明。可能是Tomcat在接收到請求后,并沒有能夠根據(jù)request中的信息提前正確的編碼方式。
            解決:可以添加一個設(shè)置字符集的Filter。
          代碼:
          package filters;

          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;
          import javax.servlet.UnavailableException;

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

           public void destroy() {
            this.encoding = null;
            this.filterConfig = null;
           }

          public void doFilter(ServletRequest request, ServletResponse response,
          FilterChain chain)
          throws IOException, ServletException {

           // Conditionally select and set the character encoding to be used
           if (ignore || (request.getCharacterEncoding() == null)) {
            String encoding = selectEncoding(request);
            if (encoding != null)
             request.setCharacterEncoding(encoding);
           }

           // Pass control on to the next filter
           chain.doFilter(request, response);

          }

          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 if (value.equalsIgnoreCase("yes"))
            this.ignore = true;
           else
            this.ignore = false;
          }

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

          配置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>





          java Servlet 中文亂碼問題
          代碼:
          import java.io.*;
          import java.util.*;
          import javax.servlet.*;
          import javax.servlet.http.*;

          public class GetFormData extends HttpServlet
          {
          public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException
          {
          String paramValues;
          paramValues=request.getParameter("UserName";
          response.setContentType("text/html;charset=gb2312";
          PrintWriter out=response.getWriter();
          out.println("";
          out.println("以下是收到的數(shù)據(jù)
          ";
          out.println("UserName="+paramValues);
          out.println("
          接收結(jié)束";
          out.println("";
          }
          public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException
          {
          doGet(request,response);
          }
          }


          只需要把
          代碼:
          paramValues=request.getParameterValues("UserName"改成下面的就可以了
          paramValues=request.getParameter("UserName";

          代碼:
          當然這句是必須的 response.setContentType("text/html;charset=gb2312"

          在jsdk2.1 tomcat及Domino5.8上的Servlet引擎運行通過了

          Weblogic Server中如何解決中文顯示亂碼問題
          《世界計算機》IT.ICXO.COM ( 日期:2004-09-29 16:07)
          --------------------------------------------------------------------------------

          由于操作系統(tǒng)、瀏覽器、數(shù)據(jù)庫、JVM采用的字符集都不一樣,基于Weblogic Server開發(fā)的應用經(jīng)常出現(xiàn)中文顯示亂碼問題,其實在Weblogic Server上運行的WEB應用有很多與字符集有關(guān)的設(shè)置,下面做一個總結(jié),為了正確處理中文,最好把這些設(shè)置都設(shè)上。

          1. 在JSP文件頭加入
          代碼:
          <%@ page contentType=text/html; charset=GBK %>
          指定該JSP采用的字符集。
          2.在Weblogic.xml文件的中加入:
          引用:
          encoding
          GBK
          指定JSP文件中采用的字符集,在JSP文件中的<%@ page contentType=text/html; charset=GBK %>會覆蓋該設(shè)置
          3.在Weblogic.xml文件的中加入
          代碼:
          compilerSupportsEncoding
          true
          如果為TRUE,指定在編譯JSP文件時,采用在JSP文件中定義的
          <%@ page contentType=text/html; charset=GBK %>或中定義的encoding參數(shù)中定義的字符集進行編碼,如果為FALSE,則采用JVM中默認指定的字符集進行編碼。
          4. Weblogic Server需要把HTTP request(GET 和POST)中的數(shù)據(jù)從它的原始編碼轉(zhuǎn)化為Unicode,以便Java servlet API進行處理,為了做這種轉(zhuǎn)換,Weblogic Server需要知道HPPT request中的數(shù)據(jù)的編碼方式。這可以通過在Weblogic.xml的中設(shè)置.
          代碼:
          〈INPUT-charset>
          /
          GBK
          5.從ORACLE數(shù)據(jù)庫中檢索出來的中文顯示不正確時,在這種情況下,如果數(shù)據(jù)庫使用的是中文字符集,并使用的是Type 2 JDBC Driver時,可加入Weblogic.codeset=GBK的屬性來解決這個問題。代碼如下:
          代碼:
          java.util.Properties props = new java.util.Properties();
          props.put(Weblogic.codeset, GBK);
          props.put(user, scott);
          props.put(password, tiger);
          String connectUrl = jdbc:Weblogic:oracle;
          Driver myDriver = (Driver)
          Class.forName(Weblogic.jdbc.oci.Driver).newInstance();
          Connection conn =
          myDriver.connect(connectUrl, props);
          6. 如果是采用WTC調(diào)用Tuxedo中的服務(wù),在JSP頁面中無法正確顯示中文,必須使安裝Tuxedo的服務(wù)器上的NLS_LANG環(huán)境變量與數(shù)據(jù)庫中的字符集的設(shè)置一樣。如后臺Oracle數(shù)據(jù)庫中的字符集設(shè)置為 SIMPLIFIED CHINESE_CHINA.ZHS16GBK,那么Tuxedo應用服務(wù)器上的NLS_LANG環(huán)境變量應設(shè)置為:
          代碼:
          export NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK

          posted on 2005-05-13 11:22 子玉 閱讀(1851) 評論(0)  編輯  收藏

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


          網(wǎng)站導航:
           
          <2005年5月>
          24252627282930
          1234567
          891011121314
          15161718192021
          22232425262728
          2930311234

          常用鏈接

          留言簿(7)

          隨筆檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 陵川县| 宜州市| 乡宁县| 仙桃市| 南康市| 紫阳县| 建水县| 基隆市| 鹤庆县| 张家川| 太和县| 齐河县| 栖霞市| 绍兴县| 龙海市| 容城县| 库车县| 丰原市| 元阳县| 壤塘县| 宾阳县| 民县| 乌拉特中旗| 江油市| 缙云县| 乐都县| 桑日县| 大洼县| 青海省| 嵊泗县| 富平县| 宁安市| 资源县| 日土县| 鄂尔多斯市| 镇远县| 潞城市| 福鼎市| 无为县| 山东省| 桦川县|