發新話題

[轉貼] 亂碼形成原因及其消除方法大全

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

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


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


  二、如何消除應用程序的界面亂碼?
  目前有些軟件發行了 Unicode 版本,這是一種通用的字符編碼標准,涵蓋了全球多種語言及古文和專業符號,這種版本的軟件運行在任何系統和語言上都不會亂碼,如果是非 Unicode 編碼的程序,就會有亂碼現象。

  【形成原因】:原因有三種。
  1. 如果是由於 Windows 注冊表中關於字體設置的信息不正確造成的,你可以用下面 “如何消除 Windows 系統界面亂碼” 介紹的辦法去解決;
  2. 如果用上法解決不了,那就可能是由於軟件的中文鏈接庫,被英文鏈接庫覆蓋而引起的。這種現象經常發生在用微軟開發工具例如 VB、 VC 開發的中文軟件上,這類軟件中,菜單等顯示界面上的漢字都是受一個動態鏈接庫(DLL 文件)控制,而軟件的這個動態鏈接庫一般安裝在 Windows\System 目錄下;
  3. 如果以後安裝了某個英文軟件也使用同名的動態鏈接庫,則英文軟件的動態鏈接庫就會覆蓋中文鏈接庫,這樣,運行中文軟件時就會調用英文的動態鏈接庫,因此出現亂碼。解決辦法:重新安裝中文軟件,恢復中文動態鏈接庫即可。
  如果以上方法也無濟於事,對於 Win9X/ME 系統,你可以安裝使用 MagicWin98(下載地址 訪客無法瀏覽此圖片或連結,請先 註冊登入會員 )、南極星等內碼轉換軟件,轉換內碼後即可消除亂碼;對於 WinXP 系統,建議使用微軟多語言支持工具 MicrosoftAppLocale(下載地址訪客無法瀏覽此圖片或連結,請先 註冊登入會員 ),利用它為指定程序設置相應的語言區域,這樣也可消除亂碼。


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

  【解決辦法】:有以下四種解決辦法:
  1、使用 Word2003/XP 轉換內碼
  Word2003/XP 支持眾多的語言,可以正確顯示非 Unicode 類型的文本文件,單擊 “工具” 菜單下的 “語言” / "設置語言",你可以把默認語言設置成非中文,例如日語,這樣 Word 就可以正確顯示日文了。
  當然你也可以用它進行簡體中文與繁體中文之間的轉換工作,如果文件有亂碼,你轉換一下即可消除。例如要把繁體中文轉換為簡體中文,方法是:選擇要轉換內碼的文件,在彈出的對話框中,選擇 “其他編碼” 中的 “繁體中文(BIG5)” 一項,打開此文件時就不會出現亂碼。

TOP

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



  2、修改網頁代碼
  用 FrontPage 等軟件打開出現亂碼的網頁,修改該網頁代碼,在以下句子中
  〈META CONTENT=“text/html;charset=ISO-8859-1”〉,將語種 “ISO-8859-1” 改為 BIG5,如果是簡體網頁則改為 GB2312。

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

  4、使用多內碼顯示軟件
  使用多內碼顯示軟件來轉換內碼,也可以消除亂碼。


      五、如何消除 Windows 系統界面亂碼?
  【形成原因】:這類亂碼是由於 Windows 注冊表中關於字體部分配置不正常造成的,即使您用內碼翻譯軟件(如南極星、MagicWin98等)處理也不會消除。
  【解決辦法】:在 Windows 注冊表中,恢復關於字體部分的正確設置。

  1、利用顯示正常的電腦
  假如有一台 Windows 版本相同、顯示正常的電腦可以利用,你可以如下步驟進行恢復:在正常機器上選擇 “開始” / “運行”,在對話框中鍵入 “REGEDIT”,打開注冊表編輯器;光標定位到 “HKEY_LOCAL_MACHINE\SYSTEM\CURRENT CONTROL SET\CONTROL\FONTASSOC”,選擇“注冊表/導出注冊表文件”,選擇 “分支”,導出該分支注冊表信息到文件(如 LI.REG)中;把 LI.REG 文件 COPY 到顯示亂碼的機器上,在顯示亂碼機器上運行 REGEDIT,選擇 “注冊注冊表” / “導入注冊注冊表”,把 LI.REG 文件導入注冊表中。

  2、在顯示亂碼的電腦上操作
  如果沒有顯示正常的電腦可以利用,就需要您手工恢復字體部分注冊表項,方法有以下兩種:
  第一種方法:用記事本編輯一個文件,然後保存為擴展名 “REG” (文件名隨意),再用鼠標右鍵單擊這個文件,在右鍵菜單中選擇合並,即可完成對注冊表的改動。該文本文件的內容如下:

   REGEDIT4
   [HKEY_LOCAL_MACHINE\System\CurtentControlset\control\fontassoc]
   [HKEY_LOCAL_MACHINE\System\CurtentControlset\control\fontassoc\Associated DefaultFonts]
   "assocSystemFont"="simsun.ttf"
   "FontPackageDontCare"="新細明體"
   "FontPackageRoman"="新細明體"
   "FontPackageSwiss"="新細明體"
   "FontPackageModem"="新細明體"
   "FontPackageScript"="新細明體"
   "FontPackageDecorative"="新細明體"

   [HKEY_LOCAL_MACHINE\System\CurtentControlset\control\fontassoc\Associated CharSet]
   "ANSI(00)"="yes"
   "SYMBOL(02)"="no"
   "OEM(FF)"="yes"
   "GB2312(86)"="yes"  

  第二種方法:在出現亂碼的電腦上,單擊菜單 “開始” / "運行",鍵入 REGEDIT 打開注冊表;找到 “HKEY_LOCAL_MACHINE\SYSTEM \CURRENT CONTROL SET\CONTROL\FONTASSOC”,正常情況下會有 ASSOCIATED DEFAULTFONTS、ASSOCIATED CHARSET 兩個文件夾。當出現漢字亂碼時,上述兩個文件夾中內容就會不完整,有的沒有 ASSOCIATED CHARSET 文件夾、或其中內容殘缺不全;有的ASSOCIATED DEFAULTFONTS 下內容殘缺。只要你打開注冊表,在 “HKEY_LOCAL_MACHINE\SYSTEM\CURRENTCONTROLSET\CONTROL\FONTASSOC” 下,根據以上正確內容恢復即可。

TOP

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

  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 收中文郵件,看到的是一篇亂碼,可以查一下 “查看” - “編碼” 下,是否選了 “繁體中文(Big5)”, “簡體中文(GB2312)” 或是 "萬國碼 Unicode (UTF-8)",選對了就不會有問題。


  此外,你也可以用 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=”Big5”
  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 解碼展開,解碼後就會消除亂碼。

TOP

  七、發信方如何避免產生亂碼郵件?
  為了避免別人收到亂碼,發信方應該采取以下的措施:

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

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

  3、正確設置 EMAIL 軟件
  選擇優秀的 Email 收發軟件可以有效地解決郵件亂碼。如果使用 Outlook 2003/XP,應在軟件中把 “繁體中文(Big5) 作為默認的郵件使用語言,選擇 “國際設置” / 為接收的所有郵件使用默認的編碼。
  如果使用英文 EMAIL 軟件,應設置成:文字設定 DEFAULT CHARSET:萬國碼 Unicode (UTF-8);編碼方式 ENCODING:QUOTED-PRINTABLE,不可選擇 7 位(因為 7 位不支持中文);字碼頁 CODE PAGE(可選):958 或 Big5,以支持整字識別;郵件格式:MIME;字體:新細明體
  如果使用其他中文 EMAIL 軟件,應設置成:文字設定 DEFAULT CHARSET:繁體中文 (Big5);編碼方式 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 格式文件即可看到漢字,不管對方在何種語言平台下,都不會出現亂碼。

TOP

感謝提供分析!可稱為大師級了!

TOP

非常謝謝提供很多實用教學知識

TOP

感謝大大ㄉ提供分析....實用ㄉ教學知識

TOP

支持 UPUPUP

TOP

發新話題

本站所有圖文均屬網友發表,僅代表作者的觀點與本站無關,如有侵權請通知版主會盡快刪除。