專利名稱:針對gbk編碼的漢字自動校驗和糾錯系統及其方法
技術領域:
本發明涉及一種適用于GBK編碼的漢字自動校驗和糾錯系統。本發明還涉及該系統的應用方法。
背景技術:
GBK,全稱《漢字內碼擴展規范》,是全國信息技術標準化技術委員制訂的漢字編碼標準,它是在GB2312標準基礎上的內碼擴展規范,因此,與GB2312標準完全兼容。GBK編碼系統總計收錄了 21003個漢字,每個漢字用2個字節表示,其中,第一個字節的范圍是0x81-0xFE,第二個字節的范圍是0x40-0xFE。例如,“萬鋼充分肯定科技”這個短語對應的GBK編碼,用16進制表示為“CD F2 B8 D6 B3E4 B7 D6 BF CF B6 A8 BF C6 BC BC”,其中,“CD F2”對應于“萬”字,“B8 D6”對應于“鋼”字,依此類推。但是,GBK編碼存在容錯性差的缺點,當編碼中出現單字節遺漏后,后續的所有漢字的編碼都會出錯,例如,上述“萬鋼充分肯定科技”這個短語,當其GBK編碼串由于種種原因,導致第一個字節“CD”丟失后,系統仍會對后續編碼以每兩個字節為一個漢字字符來顯示,這樣,上述短語就被顯示為“蚋殖浞摯隙 萍冀”,短語中所有文字均被打亂了,這種現象稱為中文編碼的“雪崩效應”。上述問題在中文互聯網傳輸文本時經常出現,它會使得文本傳輸時的細小差錯被極度擴大,而導致全部文本無法正確閱讀。
發明內容
本發明要解決的技術問題是提供一種針對GBK編碼的漢字自動校驗和糾錯系統, 它能夠識別并糾正異常的GBK編碼,恢復正確的文本字符。為解決上述技術問題,本發明的針對GBK編碼的漢字自動校驗和糾錯系統,包括有編碼異常檢測模塊,用于檢測GBK編碼的中文字符串是否存在編碼異常的情況;糾錯嘗試模塊,用于對編碼異常檢測模塊識別出的編碼異常的中文字符串,進行 GBK編碼糾錯嘗試,并將嘗試識別結果傳給糾錯判別模塊;糾錯判別模塊,用于判別糾錯嘗試模塊傳來的嘗試識別結果是否合理,并根據合理的嘗試識別結果,對中文字符串進行糾錯處理,輸出糾錯后的文本。所述編碼異常的判斷依據是該中文字符串的亂碼程度。亂碼程度通過計算中文字符串中不常用漢字和常用漢字數量的差值得到。糾錯嘗試模塊的嘗試識別結果是否合理, 可以依據糾錯嘗試前后,中文字符串的亂碼程度進行判別。所述GBK編碼糾錯嘗試是對該中文字符串的GBK編碼的高低字節進行重新組合。本發明要解決的另一技術問題是提供一種基于上述系統的漢字自動校驗和糾錯方法。為解決上述技術問題,本發明的針對GBK編碼的漢字自動校驗和糾錯方法,包括如下步驟
3
1)從待檢測中文文本的頭部開始,依次遍歷文本,判斷文本的GBK編碼中連續的兩個字節,是否滿足條件第一個字節屬于OxSl-OxFE,第二個字節屬于0X40-0XFE,如果滿足該條件,則將這兩個字節記錄到校驗字符串中;如果不滿足該條件,則將第二個字節設定為后續遍歷的起點;2)重復步驟1),依次遍歷后續文本,直到校驗字符串的長度達到預先設定的字節數時,轉到步驟3);3)將兩個計數器Coimt_l和Coimt_2的初始值設為0,判斷校驗字符串中的各個漢字是否屬于高頻漢字,如果屬于,則將coimt_l的數值加1 ;如果不屬于,則再判斷該漢字是否在GB2312標準的BOAl至F7FE字符范圍內,如果不在該字符范圍內,則將count_2的數值加1 ;4)計算校驗字符串的亂碼程度charnum = count_2-count_l ;5)判斷步驟4)得到的charnum數值,若charnum < 3,則認為校驗字符串編碼正常,轉到步驟8);若charnum >3,則認為校驗字符串編碼有錯誤,轉到步驟6);6)去除校驗字符串的第一個和最后一個字節,按照步驟幻,統計COimt_l和 count_2的數值,計算糾錯嘗試后的亂碼程度charnunuiew ;7)比較 charnum 禾口 charnum_new 的數值大小,若 charnum_charnum_new > 8, 則糾錯成功,輸出糾錯后的文本;若4 < charnum-charnum_new < 8,則以該校驗字符串后續的第一個字節為遍歷起點,重復步驟1)至7),判斷下一個校驗字符串是否滿足4 < charnum-charnum_new ( 8,如果滿足,則糾錯成功,輸出糾錯后的文本;8)對后續字符串依照步驟1)至7)進行遍歷,直至遍歷完該中文文本的全部字符。本發明的針對GBK編碼的漢字自動校驗和恢復系統及其方法,利用中文文本的統計規律,自動檢測GBK編碼異常,然后嘗試各種糾錯方法,再通過統計分類方法,判斷糾錯方案是否合適,最終將編碼有誤的文本恢復成編碼正常的文本,從而克服了 GBK編碼的文本易發生“雪崩效應”的缺陷。
下面結合附圖與具體實施方式
對本發明作進一步詳細的說明附圖是本發明的系統結構圖。
具體實施例方式為對本發明的技術內容、特點與功效有更具體的了解,現結合圖示的實施方式,詳述如下如附圖所示,本發明實施例的漢字自動校驗和糾錯系統,包括有編碼異常檢測模塊,用于識別輸入到漢字自動校驗和糾錯系統中的采用GBK編碼的中文字符串是否存在編碼異常的情況;糾錯嘗試模塊,用于對編碼異常檢測模塊認定的存在編碼異常情況的中文字符串的GBK編碼,進行高低字節的重新組合,并將組合后的嘗試識別結果傳給糾錯判別模塊;糾錯判別模塊,用于接收糾錯嘗試模塊傳來的嘗試識別結果,根據中文統計特征, 判別糾錯嘗試模塊的糾錯方案是否合理,并選擇最佳的糾錯方案,對中文字符串進行糾錯處理,輸出糾錯后的文本。應用上述實施例的漢字自動校驗和糾錯系統,對GBK編碼的中文文本進行校驗和糾錯時,按照以下步驟進行步驟1,從文本頭部開始,依次遍歷文本,判斷文本的GBK編碼中連續的兩個字節 (分別用B1和4表示)是否滿足條件0x81 ^ B1 ^ OxFE0x40 ^ B2 ^ OxFE如果滿足上述條件,則將該雙字節記錄進校驗字符串(verify_Str),然后繼續遍歷后續字符串;如果不滿足上述條件,則以ι個字節為步長,即從4開始,沿文本字符串依次向后遍歷。當校驗字符串的長度達到40個字節(即20個漢字)時,轉到步驟2。步驟2,對步驟1識別獲得的漢字,即校驗字符串中的漢字,依次進行類型判別,判斷其中的各個漢字是否屬于高頻漢字(本實施例的高頻漢字表采集自中國文字改革委員會和國家標準局編制、文字改革出版社1986年2月出版的《最常用的漢字是哪些》一書,總計700個常用漢字),如果屬于,則將計數器1 (COimt_l)的數值加上1 ;如果不屬于,則判斷該漢字是否在GB2312的簡體中文編碼范圍(即BOAl至F7FE)內,如果該漢字超出了上述范圍,則將計數器2 (coimtj)的數值加上1。上述COimt_l和Coimt_2的初始值均為0。然后,根據COimt_l和Coimt_2的數值,計算該校驗字符串文本的亂碼程度,計算公式為charnum = count—2-count—l步驟3,編碼異常檢測模塊對步驟2中計算得到的charnum的數值進行判斷,如果charnum < 3,則認為該校驗字符串文本的編碼正常,不需要再對其編碼進行調整;如果 charnum ^ 3,則認為該校驗字符串文本的編碼有錯誤,并繼續進行步驟4,由糾錯嘗試模塊嘗試糾正該段文本的編碼錯誤。步驟4,糾錯嘗試模塊將校驗字符串的第一個字節和最后一個字節去除,然后按照步驟2的方法,統計COimt_l和Coimt_2的數值,并用這兩個數值計算出新的文本亂碼程度 (charnum_new)的數值,傳給糾錯判別模塊。 步驟5,糾錯判別模塊對charnum和charnum_new的大小進行比較,如果 charnum-charnum_new > 8,則表示該段文本的GBK編碼得到了有效的糾正,糾錯判別模塊判定為GBK編碼糾錯成功,并輸出糾錯后的文本;如果4 < charnum-charnum_new ( 8,則按照步驟1至步驟4的流程,繼續判斷由文本的后續20個漢字構成的校驗字符串是否也滿足4 < charnum-charnum_new彡8,如果滿足,則認為糾錯成功,輸出糾錯后的文本,如果不滿足,則認為糾錯失敗;如果charnum-charnunuiew ^ 4,則系統也認為糾錯失敗。在糾錯失敗情況下,漢字自動校驗和糾錯系統將不對該段文本作糾錯處理。
重復上述步驟1至5,繼續遍歷文本的后續字符串,直至遍歷完該中文文本的全部字符。
權利要求
1.一種針對GBK編碼的漢字自動校驗和糾錯系統,其特征在于,包括有編碼異常檢測模塊,用于檢測GBK編碼的中文字符串是否存在編碼異常的情況;糾錯嘗試模塊,用于對編碼異常檢測模塊識別出的編碼異常的中文字符串,進行GBK 編碼糾錯嘗試,并將嘗試識別結果傳給糾錯判別模塊;糾錯判別模塊,用于判別糾錯嘗試模塊傳來的嘗試識別結果是否合理,并根據合理的嘗試識別結果,對中文字符串進行糾錯處理,輸出糾錯后的文本。
2.如權利要求1所述的漢字自動校驗和糾錯系統,其特征在于所述編碼異常的判斷依據是該中文字符串的亂碼程度。
3.如權利要求2所述的漢字自動校驗和糾錯系統,其特征在于所述亂碼程度為該中文字符串中不常用漢字和常用漢字數量的差值。
4.如權利要求1所述的漢字自動校驗和糾錯系統,其特征在于所述GBK編碼糾錯嘗試是對該中文字符串的GBK編碼的高低字節進行重新組合。
5.如權利要求2或3所述的漢字自動校驗和糾錯系統,其特征在于所述判別嘗試識別結果是否合理的依據是進行糾錯嘗試前后,該中文字符串的亂碼程度。
6.一種針對GBK編碼的漢字自動校驗和糾錯方法,其特征在于,包括如下步驟1)從待檢測中文文本的頭部開始,依次遍歷文本,判斷文本的GBK編碼中連續的兩個字節,是否滿足條件第一個字節屬于OxSl-OxFE,第二個字節屬于0X40-0XFE,如果滿足該條件,則將這兩個字節記錄到校驗字符串中;如果不滿足該條件,則將第二個字節設定為后續遍歷的起點;2)重復步驟1),依次遍歷后續文本,直到校驗字符串的長度達到預先設定的字節數時,轉到步驟3);3)將兩個計數器Coimt_l和Coimt_2的初始值設為0,判斷校驗字符串中的各個漢字是否屬于高頻漢字,如果屬于,則將coimt_l的數值加1 ;如果不屬于,則再判斷該漢字是否在GB2312標準的BOAl至F7FE字符范圍內,如果不在該字符范圍內,則將count_2的數值加1 ;4)計算校驗字符串的亂碼程度charnum= count_2-count_l ;5)判斷步驟4)得到的charnum數值,若charnum<3,則認為校驗字符串編碼正常,轉到步驟8);若charnum>3,則認為校驗字符串編碼有錯誤,轉到步驟6);6)去除校驗字符串的第一個和最后一個字節,按照步驟幻,統計Coimt_l和Coimt_2 的數值,計算糾錯嘗試后的亂碼程度charnunuiew ;7)比較charnum 禾口 charnum_new 的數值大小,若 charnum-charnum_new >8,則糾錯成功,輸出糾錯后的文本;若4 < charnum-charnum_new < 8,則以該校驗字符串后續的第一個字節為遍歷起點,重復步驟1)至7),判斷下一個校驗字符串是否滿足4 < charnum-charnum_new ( 8,如果滿足,則糾錯成功,輸出糾錯后的文本;8)對后續字符串依照步驟1)至7)進行遍歷,直至遍歷完該中文文本的全部字符。
全文摘要
本發明公開了一種針對GBK編碼的漢字自動校驗和糾錯系統,包括編碼異常檢測模塊、糾錯嘗試模塊以及糾錯判別模塊。本發明還公開了一種基于上述系統實現的漢字自動校驗和糾錯方法。該系統及其方法能夠識別并糾正異常的GBK編碼,恢復正確的文本字符。應用時,首先由編碼異常檢測模塊識別出編碼異常的文本,然后糾錯嘗試模塊針對該文本嘗試各種糾錯方案,最后,由糾錯判別模塊選擇最優的糾錯方案,將文本恢復為編碼正常的文本,從而使文本字符可以被正確地顯示出來。
文檔編號G06F17/27GK102479174SQ201010555569
公開日2012年5月30日 申請日期2010年11月23日 優先權日2010年11月23日
發明者陳運文 申請人:盛樂信息技術(上海)有限公司