中文亂碼

本页使用了标题或全文手工转换,现处于不转换模式
求闻百科,共笔求闻
求闻编者留言 | 贡献2022年6月19日 (日) 08:00的版本 (修改自此处;原许可:CC BY-SA 3.0[网站升级迁移])
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)

中文亂碼是中文系統的一種現象,這在過去未有一套統一的中文內碼標準時,情況尤其嚴重。而隨着互聯網的普及,兩岸之間或世界各地用戶交流之際,亂碼現象亦都會去了解因為各方使用的內碼不同而產生相衝的現象。

萬碼奔騰的年代

在過去,由於繁體中文使用者缺乏一個具有號召力的內碼標準,不同使用者都會使用各自的標準。比較普遍的是銀行由於主要使用IBM的商業電腦,很自然地亦選擇了IBM5550作為其內碼標準。這些用5550內碼的文件,一旦下載到微機上,若要轉寄與其他人使用,就要透過轉碼換成Big5,其他人才可以閱讀。

另一方面,在會計界有不少人都直接使用外國的專門軟體,而為免衝碼問題使畫面凌亂,不少的IT部門都把公司電腦的內碼換成倚天碼。本來會計人員過去只是把計算結果列印而提交報告,並未有任何問題。到後來隨着電子表格的興起,用戶才發覺到當公司與外界使用的內碼不同,會引起不少問題,才開始有人正視這問題。

中文Big5碼被誤認為EASCII

歐洲生產的某些電腦並無法辨識Big5雙位元字碼的中文字元,相反的,他會把位於00到7F間的字碼視為ASCII,而80到FF間的字碼則視為EASCII,例如:

中文字
Big5碼的高位/低位位元 BA FB B0 F2 A6 CA AC EC A4 A4 A4 E5 A4 6A A4 AD BD 58
對應的ASCII/EASCII字元 º û ° ò ¦ Ê ¬ ì ¤ ¤ ¤ å ¤ j ¤ ­ ½ X

也因此,中文字串「維基百科中文大五碼」會顯示為亂碼「ºû°ò¦Ê¬ì¤¤¤å¤j¤ ½X」。

UTF-8与Big5的相互转换

隨著UTF-8的普及化,許多繁體中文IRC頻道也逐漸從Big5轉變成UTF-8;然而在這種過渡時期中,仍然有不少IRC頻道是採用Big5的,所以使用者參與了新的頻道時,通常會想要先確定自己的字元編碼有沒有設錯,人們最常用的測試字眼不外乎:

編碼 內容
UTF-8 中文 測試 導航
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解码再编码再以大五码解码所产生的乱码便具有不同的特征。

简体中文编码体系与Unicode及UTF-8的相互转换

在Unicode编码与简体中文编码系统(例如GB2312GBKGB18030CP936)转换时,部分简体中文编码的文字在Unicode编码中并不存在,Unicode会以“未识别字符(U+FFFD)”作为内码记录,而对外以UTF-8表现为“0xEF0xBF0xBD”,当多个“0xEF0xBF0xBD”连续出现,而且以简体中文编码去解释的话,就会被解析为多个“锟斤拷”。(锟(0xEFBF)、斤(0xBDEF)、拷(0xBFBD))

產生的問題

過往,亂碼所產生的問題,往往只是閱讀上的不方便,因為文字變成了亂碼,使用戶看不到文字的內容。然而,現時由於電腦軟件保安設計的問題,亂碼隨時可能會使應用程式不正常關閉。

參看