亂碼形成原因及其消除方法大全

 

 當我們瀏覽網頁、打開文檔或郵件,運行軟件時,經常會看到亂碼,通常是由於源文檔編碼,Windows不能正確識別造成的的,也可能是其他原因。亂碼給我們帶來了太多的煩惱,為了幫助大家完全擺脫亂碼,下面我們就來探討一下亂碼的形成原因及其消除方法。

  一、亂碼有五種類型

  常見的亂碼,一般能夠分成五種類型:第一類是文本/文檔文檔亂碼,這一般是由於源文檔編碼,和Windows使用的編碼不通用造成的;第二類是網頁亂碼,形成原因和第一類亂碼類似;第三類是Windows系統界面亂碼,即中文Windows的菜單、桌面、提示框等顯示亂碼,主要是Windows註冊表中有關字體的部分配置不當引起的;第四類是應用程式的界面亂碼,即各種應用程式(包括遊戲)本來顯示中文的地方出現亂碼,形成原因比較複雜,有第二類的亂碼原因,也可能是軟件用到的中文鏈接庫,被英文鏈接庫覆蓋造成的;第五類是郵件亂碼,形成原因也極其複雜。

  二、如何消除應用程式的界面亂碼?

  現在有些軟件發行了Unicode版本,這是一種通用的字符編碼標準,涵蓋了全球多種語言及古文和專業符號,這種版本的軟件運行在任何系統和語言上都不會亂碼,假如是非Unicode編碼的程式,就會有亂碼現象。

  【形成原因】:原因有三種。假如是由於Windows註冊表中關於字體配置的信息不正確造成的,您能夠用下面「如何消除Windows系統界面亂碼」介紹的辦法去解決;假如用上法解決不了,那就可能是由於軟件的中文鏈接庫,被英文鏈接庫覆蓋而引起的。這種現象經常發生在用微軟研發工具例如VB、VC研發的中文軟件上,這類軟件中,菜單等顯示界面上的漢字都是受一個動態鏈接庫(DLL文檔)控制,而軟件的這個動態鏈接庫一般安裝在WindowsSystem目錄下,假如以後安裝了某個英文軟件也使用同名的動態鏈接庫,則英文軟件的動態鏈接庫就會覆蓋中文鏈接庫,這樣,運行中文軟件時就會調用英文的動態鏈接庫,因此出現亂碼。解決辦法:重新安裝中文軟件,恢復中文動態鏈接庫即可。

  假如以上方法也無濟於事,對於Win9X/ME系統,您能夠安裝使用MagicWin98(下載地址http://www.skycn.com/soft/3047.html)、南極星等內碼轉換軟件,轉換內碼後即可消除亂碼;對於WinXP系統,建議使用微軟多語言支持工具MicrosoftAppLocale(下載地址http://www.skycn.com/soft/12582.html),利用他為指定程式配置相應的語言區域,這樣也可消除亂碼。

  三、如何消除文本/文檔文檔亂碼?

  【形成原因】:一般是由於文檔採用的字符集,系統不支持造成的。例如繁體中文的文檔顯示在簡體中文系統下,或相反的情況,就會造成文檔顯示時亂碼。只要您內碼轉換正確,例如把原本是繁體的內碼,轉換為簡體內碼(或相反),即可消除亂碼。

  【解決辦法】:有以下四種解決辦法:

  1、使用Word2003/XP轉換內碼

  Word2003/XP支持眾多的語言,能夠正確顯示非Unicode類型的文本文檔,單擊「工具」菜單下的「語言」/配置語言,您能夠把默認語言配置成非中文,例如日語,這樣Word就能夠正確顯示日文了。

  當然您也能夠用他進行簡體中文和繁體中文之間的轉換工作,假如文檔有亂碼,您轉換一下即可消除。例如要把繁體中文轉換為簡體中文,方法是:選擇要轉換內碼的文檔,在彈出的對話框中(如下圖),選擇「其他編碼」中的「繁體中文(BIG5)」一項,打開此文檔時就不會出現亂碼。

  2、使用Word2003/XP無亂碼保存

  在Word2003/XP中,當保存時選擇「文檔」中的「另存為」,先存為「WORD」文檔,存盤後打開再存為純文本等其他格式;或在菜單欄中選擇「工具/語言/中文簡繁轉換」,內碼轉換以後再保存。

  3、使用內碼轉換工具

  除此之外,使用內碼轉換工具也能夠消除此類亂碼,您只要對BIG5(繁體中文)和GB2312(國標碼、簡體中文)進行相互轉換即可實現。常用的內碼轉換工具備:

  4、使用WPS2000轉換內碼

  WPS2000也能轉換內碼,支持GB2312、BIG5、GBK等三種主要的漢字編碼,並可在輸出RTF、TXT、HTM格式文檔時對內碼進行轉換。
  四、如何消除網頁亂碼?

  【形成原因】:網頁亂碼是瀏覽器(IE等)對HTML網頁解釋時形成的,假如網頁製作時編碼為A,瀏覽器卻以編碼B顯示該網頁,就會出現亂碼,因此只要您在瀏覽器中也以編碼A顯示該網頁,就會消除亂碼。

  例如網頁的代碼中有形如:〈HTML〉〈HEAD〉〈META CONTENT=「text/html;charset=ISO-8859-1」〉〈/HEAD〉的語句,瀏覽器在顯示此頁時,就會出現亂碼,因為瀏覽器會將此頁語種辨認為「歐洲語系」。

  【解決辦法】:有以下四種解決辦法:

  1、在瀏覽器中選擇「編碼」菜單

  事先為瀏覽器安裝多語言支持包(例如在安裝IE時要安裝多語言支持包),這樣當瀏覽網頁出現亂碼時,即可手工更改此類網頁的編碼方式,在瀏覽器中選擇菜單欄下的「查看」/「編碼」/「自動選擇」/簡體中文(GB2312),如為繁體中文則選擇「查看」/「編碼」/「自動選擇」/繁體中文(BIG5),其他語言依此類推,選擇相應的語系,這樣便可消除網頁亂碼現象。

  2、修改網頁代碼

  用FrontPage等軟件打開出現亂碼的網頁,修改該網頁代碼,在以下句子中

  〈META CONTENT=「text/html;charset=ISO-8859-1」〉,將語種「ISO-8859-1」改為GB2312,假如是繁體網頁則改為BIG5。

  3、無亂碼保存網頁

  用瀏覽器打開該網頁,在「查看」/「編碼」中選擇「自動選擇」,存盤時保存類型選「WEB頁」,編碼選擇「UNICODE」,這樣保存過的網頁再次打開時,在瀏覽器菜單「查看」/「編碼」中不管選擇簡體中文(GB2312)、簡體中文(HZ)還是UNICODE(UTF-8)或繁體中文(BIG5),最終顯示都不會出現亂碼。

  4、使用多內碼顯示軟件

  使用多內碼顯示軟件來轉換內碼,也能夠消除亂碼。常用多內碼顯示軟件有:

 五、如何消除Windows系統界面亂碼?

  【形成原因】:這類亂碼是由於Windows註冊表中關於字體部分配置不正常造成的,即使您用內碼翻譯軟件(如南極星、MagicWin98等)處理也不會消除。

  【解決辦法】:在Windows註冊表中,恢復關於字體部分的正確配置。

  1、利用顯示正常的電腦

  假如有一台Windows版本相同、顯示正常的電腦能夠利用,您能夠如下步驟進行恢復:在正常機器上選擇「開始」/「運行」,在對話框中鍵入「REGEDIT」,打開註冊表編輯器;光標定位到「HKEY_LOCAL_MACHINESYSTEMCURRENT CONTROL SETCONTROLFONTASSOC」,選擇「註冊表/導出註冊表文檔」,選擇「分支」,導出該分支註冊表信息到文檔(如LI.REG)中(如下圖);把LI.REG文檔COPY到顯示亂碼的機器上,在顯示亂碼機器上運行REGEDIT,選擇「註冊註冊表」/「導入註冊註冊表」,把LI.REG文檔導入註冊表中。

  2、在顯示亂碼的電腦上操作

  假如沒有顯示正常的電腦能夠利用,就需要您手工恢復字體部分註冊表項,方法有以下兩種:

  第一種方法:用記事本編輯一個文檔,然後保存為擴展名「REG」(文檔名隨意),再用鼠標右鍵單擊這個文檔,在右鍵菜單中選擇合併,即可完成對註冊表的改變。該文本文檔的內容如下:

   REGEDIT4

   [HKEY_LOCAL_MACHINESystemCurtentControlsetcontrolfontassoc]

   [HKEY_LOCAL_MACHINESystemCurtentControlsetcontrolfontassocAssociated DefaultFonts]

   "assocSystemFont"="simsun.ttf"

   "FontPackageDontCare"="宋體"

   "FontPackageRoman"="宋體"

   "FontPackageSwiss"="宋體"

   "FontPackageModem"="宋體"

   "FontPackageScript"="宋體"

   "FontPackageDecorative"="宋體"

   [HKEY_LOCAL_MACHINESystemCurtentControlsetcontrolfontassocAssociated CharSet]
   "ANSI(00)"="yes"

   "SYMBOL(02)"="no"

   "OEM(FF)"="yes"

   "GB2312(86)"="yes"  
  第二種方法:在出現亂碼的電腦上,單擊菜單「開始」/運行,鍵入REGEDIT打開註冊表;找到「HKEY_LOCAL_MACHINESYSTEMCURRENT CONTROL SETCONTROLFONTASSOC」,正常情況下會有ASSOCIATED DEFAULTFONTS、ASSOCIATED CHARSET兩個文檔夾,這些文檔夾中正確的參數如下表所示:

  當出現漢字亂碼時,上述兩個文檔夾中內容就會不完整,有的沒有ASSOCIATED CHARSET文檔夾、或其中內容殘缺不全;有的ASSOCIATED DEFAULTFONTS下內容殘缺。只要您打開註冊表,在「HKEY_LOCAL_MACHINESYSTEMCURRENTCONTROLSETCONTROLFONTASSOC」下,根據以上正確內容恢復即可。

  六、如何消除郵件亂碼?

  郵件亂碼的形成原因很多,主要有以下幾個方面,針對以下幾種形成原因,應該採取不同的亂碼消除方法:

  1、收發信雙方的語種不同導致的

  收發雙方使用的操作系統的不同,能夠造成亂碼。比如發件人使用的是日文的Windows,而收件人使用的是簡體中文的Windows,這樣的郵件當然會造成亂碼。對於中文電子郵件,假如收信方所用的操作系統是英文環境、而且沒有外掛中文系統或未轉換為中文(如南極星等)編碼方式,也會無法看到中文、只可見亂碼。任何的雙字節字符(如中文簡/繁體的GB和BIG5碼及日文的JIS、EUC和朝鮮文的 KSC碼等)在非本語種操作系統下都會出現亂碼;同樣在中文簡體的GB碼環境下,看其他雙字節字符時也只能看到亂碼。

  【解決辦法】:安裝多語言支持包或使用多內碼顯示平台(如南極星等),對收到的郵件,根據其使用的語種轉換到相應的編碼方式即可消除亂碼。

  2、發信服務器不支持8位(非ASCII碼格式)傳輸

  郵件傳輸機制或郵件編碼的不同,可能造成郵件服務器不支持8位(非ASCII碼格式)傳輸而形成郵件亂碼。例如直接發送中文或二進制等非ASCII碼格式的郵件(如中文雙字節文檔、圖片文檔.jpg、可執行文檔.exe或壓縮文檔.zip等二進制文檔)時,郵件服務器有可能無法處理,便把信件中每個字符的第八位都過濾掉,從而造成郵件信息的失真或損壞,在收到郵件時就是一堆亂碼。

  【解決辦法】:只能由發件人解決。當發送8位格式的文本文檔時,必須事先進行編碼,將文檔轉換為7位ASCII碼或更少位數的格式,然後才能確保文檔的正確傳送。收件人收到7位或更少位格式的郵件後,能夠再轉換為8位的格式,這樣就可避免亂碼。

  3、收發端用的EMAIL軟件和配置不同

  一般EMAIL軟件的"附件"功能都能夠自動對信件先進行編碼,然後送出。這樣只要收信人使用的EMAIL軟件(如Outlook XP等)能區別信件的編碼方式,即可自動將信件解碼。假如收發件人所用的EMAIL軟件默認配置不同、收發件人自己定制的一些選項不同,在收到編碼的信件後,系統就未必能識別出信件所用的編碼方法,自然也無法自動解碼,這樣就會出現亂碼。

  【解決辦法】:假如您用OE收中文郵件,看到的是一篇亂碼,能夠查一下「查看」-「編碼」下,是否選了「簡體中文(GB2312)」,選對了就不會有問題。

  此外,您也能夠用Winzip+IE來解碼,方法是:把亂碼郵件的內容,拷貝到剪貼板中,然後將其粘貼到記事本中,存為文本文檔(例如LI.txt),再將其後綴改為.uue(改為LI.uue),點擊此文檔,會啟動Winzip,然後啟動IE,把Winzip中的001.txt文檔拖到IE窗口中,就會顯示郵件原來的內容,而不會看到亂碼。  
  4、Email軟件不能識別郵件的編碼方法

  郵件的編碼方式主要有:Uuencode、Base64 encode、QP-encode、BINHEX等。假如Email軟件不能識別郵件的編碼方法,就會顯示郵件時出現亂碼。因此,您能夠根據郵件中的關鍵字符判斷編碼方法,選取合適的解碼軟件進行解碼。

  (1)、QpencodeQP編碼

  該編碼全稱「Quoted-Printable Content-Transfer-Encoding」,因為這種格式郵件的內容都是ASCII字符集中能夠打印的字符,所以名稱中含有printable。大體格式為:  =A1A=B1z=A6n=A1I=A7=DA=A6b=BA=F4=B8=F4=A4W=B1o……=E5==ABH=A5=F3=B0=DD=C3D=B1M=Aea=A1A……

  特徵:內容通常有很多等號"=",因此無需看"信頭"也能夠判斷是否為QP編碼。

  解碼辦法:把郵件中類似A1A=B1z=A6n…的部分編碼全部複製下來,貼到一個新的純文本文檔中,然後在文檔頭部加入Quoted-pintable格式的文檔頭:

  Contenet-Type:text/plain;Charset=」GB2312」

  Content-Transfer-Encoding;Quoted-pintable

  然後以「EML」為後綴保存文檔,用資源管理器雙擊打開文檔即可顯示正確的內容。假如更有部分漢字亂碼,能夠用WINZIP對存盤後的EML文檔進行解壓,即可看到正確的內容。

  (2)MIME/BASE64 encode編碼

  該編碼方式將3個字節(8位)用4個字節(6位)表示,由於編碼後的內容是6位的,因此可避免第8位被截掉,大體格式為:

    MIME-Version:1.0

    Content-Type:text/plain; charset="us-ascii"

    Content-Transfer-Encoding:base64

  Status:R SGmhQbF6pm6hSafapmK69Lj0pFexb6q+sXqsT6Skp OWrSKXzs

  N3DRLFNrmGhQQ0Kq1+sTqq6vdCx
0LF6tFit07Ddw0ShRw0KDQqtuqX9p2m2RL

  F6p9qoz6XOIE1Py3Jvc29mdCuiBJbnRlcm5ldCBN……。

  特徵:亂碼前一般有如下幾部分"信頭":Content-Type(內容類型)、charset(字符集)及Content-Transfer-Encoding(內容傳輸亂碼方式)。

  解碼辦法:用EMAIL軟件,選擇編碼中BASE64 選項就可解碼,解碼後會消除亂碼。

  (3)、BINHEX編碼

  這種編碼方式大體格式為:

  (This file must be converted with Binhex4.0)SGmhQbF6pm6hSafapmK69Lj0pFexb6qss

  Tqq6vdCx
0LF6tFit07Ddw0ShRw0KDQqtuqX9p2m2RLF6p9qoz6XOIE…….

  解碼辦法:用EMAIL軟件對他解碼;也可在EMAIL軟件中保存亂碼郵件,存為後綴為「.HQX」格式的文檔,然後用WINZIP解碼展開。解碼後會消除亂碼。

  (4)、UTIF-7/UTIF-8編碼

  他們是UNICODE的兩種轉換碼。

  (5)、Uuencode編碼

  這是UNIX環境下使用的編碼方式,現在已很少用,大體格式為:

    begin 644 kk.zip M1G)O;2!I;&EN+F)B3T!C(VEE+FYC=’4N961U+G1W(%=E9"!.;W8@(#8@,3(ZM,SDZ,C4@,3DY-@I296-E:79E9#H@9G)O;2!F;&%B;6%I;"YF;&%B+F9U:FET……………..。

     end

  特徵:亂碼前面含有"begin xxx",後面是編碼前的原始文檔名(如kk.zip);接著是已過編碼的信件內容(如上述的亂碼部分);最後一行為"end"

  解碼辦法:可用BECKY!EUDORA等EMAIL軟件,選擇編碼中相應的選項就可解碼;也能夠在EMAIL軟件中保存亂碼郵件,存為後綴為「.UUE」格式的文檔,然後用WINZIP解碼展開,解碼後就會消除亂碼。
 七、發信方如何避免產生亂碼郵件?

  為了避免別人收到亂碼,發信方應該採取以下的措施:

  1、設定默認自動為7位編碼

  在郵件客戶端軟件中的書寫(撰寫)選項中,設定默認自動為7位編碼。因為當您發送 8位格式的文本文檔時,必須事先進行編碼,將文檔轉換為7位ASCII碼或更少位數的格式,然後才能確保文檔的正確傳送。收件人收到7位或更少位格式的郵件之後,能夠再轉換為8位的格式,這樣就能夠閱讀了。

  2、發送前在簽字欄中註明使用的漢字編碼

  發送中文郵件前,最好在固定的簽字欄中註明自己所使用的漢字碼標準(例如GB2312、中文HZ、GBK等);港澳台及東南亞地區郵件作者在使用BIG5 碼撰寫完郵件、向內地發送前,要轉換成上述三種簡體國標碼中的一種形式、並在簽字欄中註明。如不轉換則可能無法閱讀,因為國內用戶使用的郵件系統有很多不支持BIG5碼。

  3、正確配置EMAIL軟件

  選擇優秀的Email收發軟件能夠有效地解決郵件亂碼。假如使用Outlook 2003/XP,應在軟件中把「簡體中文(GB2312)作為默認的郵件使用語言,選擇「國際配置」/為接收的任何郵件使用默認的編碼。

  假如使用英文EMAIL軟件,應配置成:文字設定DEFAULT CHARSET:ISO 8859-1(LATIN1);編碼方式ENCODING:QUOTED-PRINTABLE,不可選擇7位(因為7位不支持中文);字碼頁CODE PAGE(可選):936或HZ-GB-2312,以支持整字識別;郵件格式:MIME;字體:宋體

  假如使用其他中文EMAIL軟件,應配置成:文字設定DEFAULT CHARSET:簡體中文GB2312;編碼方式ENCODING:QUOTED-PRINTABLE;郵件格式:MIME;字體:宋體

  4、發送重要信息時先發測試信

  發送重要信息時,為了確認是否無須編碼即可發送正文,應該先發送測試信。而且還應確定收件人能否對附件文檔進行解碼。假如發送已編碼的郵件,則最好添加足夠的「信頭」信息,以便收件人知道所需的解碼方法。建議對uuencode/UUDeview編碼方式用uuencoding作信頭,對mpack編碼方式用base64 encoding作信頭。

  假如發/收件人之間遠隔萬里,則傳送過程中,第八位將可能被截掉。這時最好先在正文中用中文給收件人發一封測試信,並瞭解對方能否正確收到郵件正文。假如第八位被截掉,則收件人將會看到一些亂碼,而不是上述的uu/b64/Qp等格式,而且這種信件幾乎不可恢復。

  對策:在Netscape、Eudora或Pegasus Mail等您所使用的郵件系統中,選擇其最好選擇項或選項配置中的"Quoted Printalbe"或"MIME encoding

  5、盡量利用「附件」功能發送文檔

  幾乎任何的郵件軟件,如Netscape、The Bat!、 Becky! 等郵件系統附加這類非標準 ASCII碼格式的文檔時,附加文檔通常能夠自動進行「base64」方式編碼(僅對附件部分進行編碼)。在用"附件"方式發送郵件之前,無需進行編碼;否則適得其反。因為郵件軟件能夠自動成功解碼這類「附加」文檔,因此在發送中文類郵件時應該最好選擇這種方法。

  假如無法以附件方式發送文檔,則必須在正文中發送中文或二進制文檔

  八、收信方如何避免郵件顯示亂碼?

  收信方應該首先查找郵件的簽字欄或正文中,有無指明對方使用的漢字編碼類別;然後在Outlook XP「視圖」菜單下選中「編碼」,隨後將出現全部的漢字編碼,在其中選擇郵件所指明的一種。

  假如收到的郵件中沒有指明所用的漢字編碼,則能夠順序單擊選擇編碼,直到郵件正文顯示正確為止。假如您使用的是Netscape,則可在 Option菜單下的Document Encode中選擇相應的項目。

  九、在跨語種操作系統間收發電子郵件,如何確保不會亂碼?

  假如對方使用非中文系統,您給他發中文郵件時,他打開您發的中文郵件,就會出現亂碼。解決辦法有兩種:

  1、用繪圖軟件書寫中文郵件

  用畫筆等繪圖軟件書寫中文郵件,然後把中文郵件以GIF圖像格式保存,最後壓縮之、作為郵件附件發送。

  運行繪圖軟件,在圖片中輸入文字,用GIF格式保存,將屬性置為黑白模式(以減少圖片體積),然後用WINZIP把他壓縮成ZIP格式,作為附件在郵件中發送,這樣不管對方在何語言平台下,都不會出現亂碼,收信人不必去下載PDF文檔閱讀器,閱讀起來也很方便。

  2、使用專門的工具轉換和閱讀

  EMAIL AID之類的工具能夠把中文郵件轉換為AID格式文檔,您把該格式文檔發給對方,他再用EMAIL AID打開觀看即可。

  EMAIL AID(UCWIN GOLD 1.0附帶的)能夠把文本文檔轉換為AID格式文檔,大小只比原TXT文檔增加幾K。寫好中文郵件後,用文本格式存盤,然後您運行EMAIL AID,以AID格式保存,最後您把AID文檔連同EMAIL AID軟件一起作為附件插在信中。對方收到信後,只需運行EMAIL AID,打開AID格式文檔即可看到漢字,不管對方在何種語言平台下,都不會出現亂碼。 

This entry was posted in 未分類. Bookmark the permalink.

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 變更 )

Twitter picture

You are commenting using your Twitter account. Log Out / 變更 )

Facebook照片

You are commenting using your Facebook account. Log Out / 變更 )

Google+ photo

You are commenting using your Google+ account. Log Out / 變更 )

連結到 %s