棲息地

          家園

          幾種亂碼問題(轉(zhuǎn))

          用什么編輯器可以使xml文件的中文變成UTF-8亂碼   
          我把g b2312改成UTF-8瀏覽器提示出錯(cuò)~~~

          最簡(jiǎn)單的Word應(yīng)該可以完成轉(zhuǎn)換,另外UE和Edit++都支持轉(zhuǎn)換

          =======================================================

          在寫一個(gè)東東,是sqlserver后臺(tái),用utf-8編碼,一直是剛出來還可,一刷新就成亂碼了,以為是sql的原因,一次 把<title></title>里的全刪了,就沒問題了,后來發(fā)現(xiàn),最好把<META http-equiv=Content-Type content="textHtml; charset=utf-8">放在title前,不然有些還是會(huì)錯(cuò)!
          =======================================================

          為每個(gè)jsp頁面設(shè)置了其編碼格式(utf-8),但傳遞數(shù)據(jù)到另一頁面時(shí)依然顯示為亂碼?  首先要需要了解的是web容器默認(rèn)編碼是iso- 8859-1,一個(gè)漢字占用兩個(gè)字節(jié),而在utf-8中一個(gè)漢字占用三個(gè)字節(jié)。所以在數(shù)據(jù)傳遞過程中,必須手動(dòng)設(shè)定容器編碼格式,否則會(huì)出現(xiàn)字符位丟失的 情況。即3個(gè)字節(jié)變?yōu)閮蓚€(gè)字節(jié),自然會(huì)變成亂碼。為什么保存到數(shù)據(jù)庫中的數(shù)據(jù)都變成了亂碼?  原理同上,首先要搞清楚使用的數(shù)據(jù)庫默認(rèn)的編碼格式,比如 mysql默認(rèn)的字符編碼是ISO-8859-1。所以必須手動(dòng)修改其默認(rèn)編碼格式。  清楚了以上問題后,再來看如何解決utf-8的亂碼問題。
          1:設(shè)置web容器的編碼格式。為你的servlet的doGet或doPost方法開始處加入如下代碼:request.setCharacterEncoding("utf-8");
             response.setCharacterEncoding("utf-8");

          2:為每個(gè)jsp頁面指定其編碼格式。<%@ page pageEncoding="utf-8"%>

          3:在連接數(shù)據(jù)庫用的URL后加入:useUnicode=true;characterEncoding=utf-8 如:  url="jdbc:mysql:///db1?useUnicode=true;characterEncoding=utf-8",

          4:為指定數(shù)據(jù)庫默認(rèn)編碼格式。在C:\WINDOWS目錄下找到my.ini文件,并在[mysqld]中加入default-character- set=gbk,重新啟動(dòng)mysql服務(wù)?! ≈链耍瑏y碼問題全部解決。起初總搞上去不清,為什么要將mysql的默認(rèn)編碼格式設(shè)置為gbk,后來由相關(guān) 的資料得知utf-8默認(rèn)輸入編碼方式為gbk,默認(rèn)輸出編碼方式為utf-16be。  個(gè)人認(rèn)為,將數(shù)據(jù)進(jìn)行utf-8進(jìn)行編碼的目的(即將中文編碼 為%的形式),主要是為了在多層服務(wù)間進(jìn)行數(shù)據(jù)傳輸時(shí),防止發(fā)生字符丟失(如msn)。普通的web程序顯然沒有必要這樣做,只要使用以上方法進(jìn)行處理, 就可以有效的解決亂碼問題,從而結(jié)省存儲(chǔ)空間。如果都像公司的SC系統(tǒng)那樣,將一個(gè)漢字編碼為18個(gè)字符后,再存儲(chǔ)到數(shù)據(jù)庫中,拋開效率不說,就存儲(chǔ)空間 的浪費(fèi)就夠人受的,要知道,那是需要銀子地!
          ========================================================

          ASP動(dòng)態(tài)網(wǎng)頁下UTF-8頁面亂碼的解決方法

          為什么在ASP里指定了codepage為65001還經(jīng)常顯示亂碼。才子在這里將這個(gè)問題詳細(xì)解釋一下,以免很多朋友再走彎路,甚至排斥UTF-8。


          如果你還不知道UTF-8是什么東東,那才子建議你先去搜索一下UTF-8的相關(guān)資料吧。


          UTF-8編碼之所以被越來越多的人接受甚至喜歡,肯定是有道理的,在WEB2.0盛行的今天,在大談多瀏覽器兼容的同時(shí),不得不想到字符編碼不同所造成的亂碼現(xiàn)象同樣需要得到很好的處理..... CHINAZ

          在N年以前,IE6以下的所有版本,只要沒有安裝相應(yīng)的字庫,訪問相關(guān)的頁面都是會(huì)亂碼的,例如,我是IE5 (Windows2000默認(rèn)) 的版本,在沒有安裝IE繁體字庫的情況下,訪問任何繁體頁面的網(wǎng)站都是會(huì)亂碼的,當(dāng)然前提是該頁面采用了BIG5的Charset,而UTF-8作為一種 國(guó)際編碼就能很好的處理該問題,只要將頁面存為UTF-8編碼格式,再在頁面上將codepage及charset全部定義為utf-8就可以在任何客戶 端瀏覽器中顯示出完全正確的內(nèi)容,完全不會(huì)亂碼......


          好了,這里以ASP頁面為例,以一個(gè)實(shí)例來看具體操作吧:

          打開新建一個(gè)ASP頁面,相信玩ASP的朋友都會(huì)留意到,許多下載的源碼里,頁面最上方一般都有一句:


          以下為引用的內(nèi)容:

          %@LANGUAGE="VBSCRIPT" CODEPAGE="936"% CHINAZ
           
          CHINAZ

          前面的language應(yīng)該不用多說了,vbscript就是ASP默認(rèn)的腳本語言,其實(shí)完全可以不用寫,寫了好像還會(huì)影響頁面執(zhí)行效率,在這里我 們先不討論這個(gè)問題。后面的codepage就是關(guān)鍵了,目的就是告訴瀏覽器,此頁面是何種編碼,936代表是簡(jiǎn)體中文,而950代表繁體中 文,65001就是我們今天說的UTF-8編碼了。我們將936改成65001。整句如下: CHINAZ

          以下為引用的內(nèi)容:

          %@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%
           

          再加上輸出幾個(gè)中文字看看能不能正確顯示吧。 CHINAZ

          以下為引用的內(nèi)容:
          <%
          Response.Write "第一次測(cè)試UTF-8頁面"
          %> 

          OK,直接點(diǎn)擊“保存”,執(zhí)行這個(gè)頁面看看,如果不出意外,大家可能看到顯示出的是 “一尾UTF-8頁”這幾個(gè)字,中文有亂碼的現(xiàn)象,什么原因呢?

          OK,請(qǐng)大家再點(diǎn)擊最上面的 "文件" 菜單,選擇"另存為",最下面一行有個(gè)編碼,默認(rèn)應(yīng)該是ANSI的,請(qǐng)大家點(diǎn)下拉框,選擇UTF-8,再點(diǎn)保存,再執(zhí)行試試看,如果不出意外,亂得更厲害 了,呵呵,暈了吧。別急,想想原因,因?yàn)槲覀冏龅捻撁媸荋TML返回的,以前我們寫HTML時(shí),看到body前面,也就是head里都有一句meta,應(yīng) 該是這樣的: 

          以下為引用的內(nèi)容:
          <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> 

          也就是指定頁面以gb2312編碼返回結(jié)果,一定要寫在有返回結(jié)果輸出的前面。大家都知道gb2312是簡(jiǎn)體中文吧,我們今天說的是UTF-8編碼,我們就將gb2312改成UTF-8吧,全部代碼如下: CHINAZ

          以下為引用的內(nèi)容:
          <%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
          <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
          <%
          Response.Write "第一次測(cè)試UTF-8頁面"
          %> 

          一,文件沒有存為對(duì)應(yīng)的格式,

          可能有網(wǎng)友認(rèn)為將META元標(biāo)記的解碼方式改一下,就可以實(shí)現(xiàn)GB2312轉(zhuǎn)UTF-8,或者UTF-8轉(zhuǎn)GB2312,這其實(shí)是錯(cuò)誤的,雖然你把 GB2312編碼的網(wǎng)頁的Meta標(biāo)記改為了Utf-8,但這樣的操作會(huì)讓你發(fā)現(xiàn)網(wǎng)頁出現(xiàn)了亂碼。究其原因你文件編碼格式還是gb2312的,這時(shí)你應(yīng)把 文件存為utf-8,再改meta標(biāo)記的解碼方式。對(duì)于將文件存為utf-8,很多朋友可能會(huì)用記事本去操作,我不建議這樣去做,因?yàn)橛糜浭卤巨D(zhuǎn)換的編碼 而做的網(wǎng)頁會(huì)在W3C效驗(yàn)時(shí)出現(xiàn)BOM錯(cuò)誤,具體如下

          Byte-Order Mark found in UTF-8 File. The Unicode Byte-Order Mark (BOM) in UTF-8 encoded files is known to cause problems for some text editors and older browsers. You may want to consider avoiding its use until it is better supported.

          你可以用比較新版本的editplus和ultraedit都可以選擇保存為無BOM的utf-8格式。

          二,文件缺少必要的標(biāo)識(shí)

          檢查Html標(biāo)記里有沒有如下

          <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

          檢查XML文檔里有沒有

          <?xml version="1.0" encoding="utf-8"?>

          utf-8或者gb2312,看你文檔的編碼。

          如果是ASP動(dòng)態(tài)頁面,最好加上以下幾句

          以下為相關(guān)html文檔

           <%@ LANGUAGE = "VBScript" CodePage = "65001"%>

          CodePage = "65001"中的65001代表是UTF-8編碼的文檔,GB2312編碼的是936

          以下為相關(guān)vbscript文檔

           Session.CodePage=65001

          另外網(wǎng)上還有如下的ASP代碼,我沒試過

          以下為相關(guān)vbscript文檔

           Response.Charset="utf-8"



          結(jié)論:采用UTF-8編碼,除了要將文件另存為UTF-8格式之外,還需要同時(shí)指定codepage及charset。

          posted on 2009-05-01 18:12 drecry 閱讀(504) 評(píng)論(0)  編輯  收藏 所屬分類: html


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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 太原市| 绥滨县| 色达县| 沾益县| 柳州市| 伊春市| 陆河县| 邯郸县| 大新县| 元朗区| 紫金县| 太康县| 平邑县| 阳东县| 荆州市| 石渠县| 迭部县| 新田县| 洛阳市| 大丰市| 凤山市| 志丹县| 婺源县| 江山市| 利辛县| 沙河市| 汕尾市| 新乐市| 孝昌县| 呼图壁县| 梅州市| 沁水县| 宣恩县| 天津市| 高邮市| 灵宝市| 威远县| 阳高县| 绥化市| 垦利县| 大足县|