亂碼

顯示字庫問題導致系統顯示錯誤的字符或空白

亂碼指的是電腦系統不能顯示正確的字元而顯示其他無意義的字元或空白,通常是使用非預期的字元編碼對文字進行解碼的結果[1]。這樣所顯示出來的文字統稱為亂碼。此外,將非文字的資料以文字方式解碼得到的無意義字元也稱為亂碼。

用Windows-1252編碼編譯UTF-8編碼的「亂碼」(ja:文字化け日文維基百科條目

由於缺少字型或字型中缺少字形而導致字形彩現失敗是一個不同的問題,文字通常顯示為虛缺號(□)或者十六進制編碼,不應與亂碼混淆。

例如,微軟編譯器產生「烫烫烫」「屯屯屯」亂碼,編碼字元集轉換產生的「锟斤拷」「毺絞銝」「脣銝餌」亂碼[2]。對於重複的位元組串0xCC,根據採用編碼的不同,簡體GBK會顯示「烫烫烫」,台灣大五碼會顯示「昍昍昍」,日本Shift-JIS會顯示「フフフフフフ」。

可能的產生原因

  • 一般是軟體程式解碼錯誤,如瀏覽器把GBK碼當成是Big5碼顯示,或電子郵件程式把對方傳來的郵件錯誤解碼。如果在傳送時編碼錯誤,收件者的電子郵件程式不能解碼,需要寄件者的電子郵件程式重新編碼再寄。
  • 字體檔案(font file)不對。
  • 來源編碼錯誤,或檔案受到破壞。
  • 一種語言版本的作業系統安裝了另外一種語言版本的應用程式,或者應用程式安裝的修補程式的語言版本與應用程式原來安裝的語言版本不一致。
  • 早期單位元組的應用程式在打開雙位元組語言的檔案時不能正確辨識文字的分割,在換行的地方把一個字從中分成兩段,導致緊接在後面的整個一行全部都是亂碼。
  • 低階版本的應用程式不能辨識高階版本的程式建立的檔案。

可能的解決方法

  • 轉換編碼:一般可試Big5GBKUTF-8Unicode的一種應用方式,包括世界上主要的文字)三種,如涉及的不是中文,可以再試JIS日文)、KR韓文)及其他文字編碼。徹底的解決方法是雙方使用同一編碼系統,如UTF-8,只要使用者有對應的字體檔案就可以正確的顯示文字。實際上要統一編碼系統還要克服各種客觀的困難,現時只有靠軟體(如Microsoft AppLocale)有更高的解碼能力。
  • 因繁簡編碼不通用導致的亂碼,於系統的其他日期、時間與地區設定將非Unicode程式的使用語言更改為繁體/簡體或能解決。
  • 轉換字體:如果解碼正確而出現錯誤文字,有可能是字體檔案沒有相對應的字元,可嘗試轉換字體檔案。
  • 如果本來該顯示出漢字的,卻變成數字,如最欣賞相中拉(最欣賞相中拉)等Unicode代碼,可以把這部分抄出來,獨立儲存成html檔, 再用瀏覽器打開解碼,或直接用JavaScript解讀︰
    alert("最欣賞相中拉");
    
  • 其他:有時解碼的方法要視乎軟體和實際環境,及不斷嘗試才能解碼,特別在不知本來是用哪種編碼系統時。
  • 有時輸入漢字時也會出現亂碼,不過這種情況很少出現。最大原因是輸入法所用的編碼,與經編輯器輸出的字體編碼不符所致,可嘗試轉換字體來解決。例如把GBK編碼的輸入法裝到只支援Big5的系統上,是不能正確顯示所輸入的字的;必需選擇Big5編碼的輸入法,或把輸入法裝到GBK的系統中。
  • 外文所引致的亂碼,只有轉換支援某外文的字體檔案才能解決。

參見

參考

  1. ^ King, Ritchie. Will unicode soon be the universal code? [The Data]. IEEE Spectrum. 2012, 49 (7): 60. doi:10.1109/MSPEC.2012.6221090. 
  2. ^ "烫烫烫屯屯屯" 那些事. 知乎專欄. [2022-10-15]. (原始內容存檔於2020-10-20) (中文). 

外部連結