热门问题
时间线
聊天
视角
中文乱码
来自维基百科,自由的百科全书
Remove ads
中文乱码是电子资讯系统的中文无法正确显示文字符号的一种现象,在中文内码未有标准时情况尤其严重[1]。
“万码奔腾”的年代
在过去,由于繁体中文缺乏个具号召力内码标准,不同使用者都会使用各自标准。比较普遍的是银行由于主要使用IBM的商业电脑,很自然地亦选择了IBM 5550作为其内码标准。这些用5550内码的文件,一旦下载到计算机上,若要转寄与其他人使用,就要透过转码换成Big5,其他人才可以阅读。
另一方面,在会计界有不少人都直接使用外国的专门软体,而为免冲码问题使画面凌乱,不少的IT部门都把公司电脑内码换成倚天码。本来会计人员过去只是把计算结果列印而提交报告,并未有任何问题。到后来随着电子表格的兴起,用户才发觉到当公司与外界使用不同内码,会引起不少问题,乱码问题才开始得到重视。
繁体中文编码体系产生的乱码
欧洲生产的某些电脑并无法辨识Big5双位元字码的中文字元,相反的,它们会把位于00到7F间的字码视为ASCII,而80到FF间的字码则视为EASCII,例如:
也因此,中文字串“維基百科中文大五碼”会显示为乱码“ºû°ò¦Ê¬ì¤¤¤å¤j¤ ½X”。
随著UTF-8的普及化,许多繁体中文的IRC频道也逐渐从Big5转变成UTF-8;然而在这种过渡时期中,仍然有不少IRC频道是采用Big5的,所以使用者参与了新的频道时,通常会想要先确定自己的字元编码有没有设错,人们最常用的测试字眼不外乎:
当一段大五码文本被错误地以UTF-8解码再编码再以大五码解码,由于在被以UTF-8解码时的无效字符被以Unicode的“未识别字符(U+FFFD)”作为内码记录,而那替代字符的UTF-8编码的十六进制为“EF BF BD
”。当那替代字符因为按UTF-8解码会出现大比例的无效字符而令其大片大片地出现,进而在被UTF-8再编码再以大五码解码后读码框取到UTF-8替代字符的编码的第一个字节和第二个字节的十六进制“EF BF
”解码得到“嚙”字,接下来的读码框横跨两个UTF-8替代字符取到第一个UTF-8替代字符的第三个字节和第二个UTF-8替代字符的第一个字节的十六进制“BD EF
”解码得到“踝”字,再接下来的读码框取到第二个UTF-8替代字符的第二个字节和第三个字节的十六进制“BF BD
”解码得到“蕭”字,连起来就是“嚙踝蕭”。这样的情况反复出现就令其中出现大量“嚙踝蕭”字样。并且由于在被以UTF-8解码时所出现的各种无效字符与有效字符的各种组合,再以大五码解码后其中会有许多不是出现在“嚙踝蕭”子序列中的“嚙”、“蕭”字样。
另外其他编码的非UTF-8文本或非文本二进制数据被错误地以UTF-8解码再编码再以大五码解码也会如上产生嚙踝蕭乱码,然而由于原字节序列的特征会部分地传递至以UTF-8解码后所产生的中间阶段乱码,这样因此由这些方式产生的乱码跟大五码文本被错误地以UTF-8解码再编码再以大五码解码所产生的乱码便具有不同的特征。
Remove ads
简体中文编码体系产生的乱码
在中文互联网上流行着一个冷笑话,总结了简体中文编码中经常出现的乱码:[2][3]
手持两把锟斤拷,口中疾呼烫烫烫。 脚踏千朵屯屯屯,笑看万物锘锘锘。
在Unicode编码(主要为UTF-8)与简体中文编码系统(例如GB 2312、GBK、GB 18030、CP936)转换时,如果将中文编码(或其他非UTF-8编码)的字节串当作UTF-8解码,由于一个字符串在任何其它编码中表现为合法的UTF-8的可能性很低,这些不合法的编码在Unicode中会以“未识别字符(U+FFFD)”作为内码记录,再次以UTF-8编码时就会表现为EF BF BD
。当多个EF BF BD
连续出现,而且以简体中文编码去解释的话,就会被解析为多个“锟斤拷”。三个字的编码分别是锟(0xEFBF)、斤(0xBDEF)、拷(0xBFBD)。
在Visual C++中,以调试模式运行程序时,未初始化的栈空间被以0xCC填充,而未初始化的堆空间则是0xCD。当不小心以字符串形式输出了这些未初始化的内容时,系统会以GBK编码解析为一连串重复的“烫”(0xCCCC)或者“屯”(0xCDCD)。
此外,一些早期命令行界面程序会使用代码页437中的扩展字符来模拟窗口,字符“═”(0xCD)可以作为窗口的上下边界。但如果操作系统采用的是代码页936,则会将相邻的“═”识别为“屯”(0xCDCD),于是窗口上下边界就变成了一连串的“屯屯屯”。
Windows操作系统中,将文本文件保存为UTF-8格式时会在文件开头添加字节顺序标记(BOM)EF BB BF
,当文件以GBK编码打开时,开头两个字节会被解析为“锘”(0xEFBB)。
产生的问题
过往,乱码所产生问题,往往只是不便阅读,因为文字变成了乱码,使用户看不到文字的内容。然而,现时由于电脑软件保安设计的问题,乱码随时可能会使应用程式不正常关闭。
参见
参考文献
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads