乱码

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

乱码指的是电脑系统不能显示正确的字符而显示其他无意义的字符或空白,通常是使用非预期的字符编码对文本进行解码的结果[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) (中文). 

外部链接

编辑