亂碼

顯示字庫問題導致系統顯示錯誤的字符或空白
(重定向自乱码

乱码指的是電腦系統不能顯示正確的字符而顯示其他無意義的字符或空白,通常是使用非预期的字符编码对文本进行解码的结果[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) (中文). 

外部連結