ASCII編碼區(qū)間,則滿足ASCII編碼區(qū)間的字符數(shù)+1 ;偏移I位,返回步驟3.1.1,繼續(xù)遍歷統(tǒng)計后續(xù)數(shù)據(jù),直至可偏移的最大長度,即所述解碼后的數(shù)據(jù)遍歷完畢;
[0159]步驟3.1.2:判斷前兩個字符(例:E8 BF)是否滿足UTF8與GB18030的重疊區(qū)間(包括可顯示區(qū)間和不可顯示區(qū)間),不滿足,則進行下一步;
[0160]本步驟中,如果前兩個字符滿足UTF8與GB18030的重疊區(qū)間,則滿足UTF8與GB18030的重疊區(qū)間的字符數(shù)+2 ;偏移2位,返回步驟3.1.1,繼續(xù)遍歷統(tǒng)計后續(xù)數(shù)據(jù),直至可偏移的最大長度;
[0161]步驟3.1.3:判斷前兩個字符(例:E8 BF)是否滿足空洞編碼區(qū)間,不滿足,則進行下一步;
[0162]本步驟中,如果前兩個字符滿足空洞編碼區(qū)間,則滿足空洞編碼區(qū)間的字符數(shù)+2 ;偏移2位,返回步驟3.1.1,繼續(xù)遍歷統(tǒng)計后續(xù)數(shù)據(jù),直至可偏移的最大長度;
[0163]步驟3.1.4:判斷前四個字符(例:E8 BF 99 E5)是否滿足GB18030的四字節(jié)編碼區(qū)間,不滿足,則進行下一步;如果滿足,則確定GB18030編碼類型為最終編碼類型;
[0164]步驟3.1.5:判斷前六個字符(例:E8 BF 99 E5 BO BI)是否同時滿足GB18030編碼和UTF8非常用6字節(jié)組合編碼區(qū)間,不滿足,則進行下一步;
[0165]本步驟中,如果前六個字符同時滿足GB18030編碼和UTF8非常用6字節(jié)組合編碼區(qū)間,則同時滿足GB18030編碼和UTF8非常用6字節(jié)組合編碼區(qū)間的字符數(shù)+6 ;偏移6位,返回步驟3.1.1,繼續(xù)遍歷統(tǒng)計后續(xù)數(shù)據(jù),直至可偏移的最大長度;
[0166]步驟3.1.6:判斷前六個字符(例:E8 BF 99 E5 BO BI)是否同時滿足GBB18030編碼和UTF8中文編碼與UTF8非常用6字節(jié)編碼組合區(qū)間,不滿足,則進行下一步;
[0167]本步驟中,如果前六個字符同時滿足GBB18030編碼和UTF8中文編碼與UTF8非常用6字節(jié)編碼組合區(qū)間,則同時滿足GBB18030編碼和UTF8中文編碼與UTF8非常用6字節(jié)編碼組合區(qū)間的字符數(shù)+6 ;偏移6位,返回步驟3.1.1,繼續(xù)遍歷統(tǒng)計后續(xù)數(shù)據(jù),直至可偏移的最大長度;
[0168]步驟3.1.7:判斷前六個字符(例:E8 BF 99 E5 BO BI)是否同時滿足GB18030編碼和UTF8非常用編碼區(qū)間的不可顯示編碼區(qū)間與UTF8編碼6字節(jié)組合區(qū)間,不滿足,則進行下一步;
[0169]本步驟中,如果前六個字符同時滿足GB18030編碼和UTF8非常用編碼區(qū)間的不可顯示編碼區(qū)間與UTF8編碼6字節(jié)組合區(qū)間,則同時滿足GB18030編碼和UTF8非常用編碼區(qū)間的不可顯示編碼區(qū)間與UTF8編碼6字節(jié)組合區(qū)間的字符數(shù)+6 ;偏移6位,返回步驟
3.1.1,繼續(xù)遍歷統(tǒng)計后續(xù)數(shù)據(jù),直至可偏移的最大長度;
[0170]步驟3.1.8:判斷前三個字符(例:E8 BF 99)是否滿足UTF8編碼區(qū)間,滿足,則滿MUTFS編碼區(qū)間的字符數(shù)+3 ;偏移3位,返回步驟303A1,繼續(xù)遍歷統(tǒng)計后續(xù)數(shù)據(jù),直至可偏移的最大長度。
[0171]本步驟中,如果前三個字符不滿足UTF8編碼區(qū)間,則當(dāng)前字符不滿足任何編碼區(qū)間,確定所述解碼后的數(shù)據(jù)對應(yīng)的編碼類型為GB18030編碼。
[0172]循環(huán)執(zhí)行步驟3.1中的各步驟,直至解碼后的數(shù)據(jù)中的所有字符遍歷完畢,本實施例中所述解碼后的數(shù)據(jù)的統(tǒng)計結(jié)果為:滿足ASCII編碼區(qū)間的字符個數(shù)為I個,滿足UTF8編碼區(qū)間字符個數(shù)為12個,滿足UTF8與GB18030編碼可顯示重疊編碼區(qū)間的字符個數(shù)為2個,滿足其他編碼區(qū)間的字符數(shù)均為O。
[0173]步驟3.2:根據(jù)統(tǒng)計結(jié)果進行編碼類型決策;
[0174]具體的,本發(fā)明實施例中所述解碼后的數(shù)據(jù)總長度M= 15,M減去空字符和O字符的長度后N = 15 ;
[0175]本發(fā)明實施例進行編碼類型決策的過程包括以下步驟:
[0176]步驟3.2.1:判斷N是否等于ASCII區(qū)間的字符長度1,判斷結(jié)果為不等于,進行下一步;
[0177]步驟3.2.2:判斷N是否等于UTF8編碼區(qū)間的字符長度12與ASCII編碼區(qū)間字符長度I之和13,判斷結(jié)果為不等于,進行下一步;
[0178]步驟3.2.3:判斷N是否等于GB18030編碼區(qū)間的字符長度O與ASCII編碼區(qū)間字符長度I之和1,判斷結(jié)果為不等于,進行下一步;
[0179]步驟3.2.4:判斷N是否等于UTF8編碼區(qū)間的字符長度12、ASCII編碼區(qū)間字符長度I及UTF8編碼與GB18030編碼重疊區(qū)間字符長度2之和15,判斷結(jié)果為等于,認為所述解碼后的數(shù)據(jù)對應(yīng)的編碼類型為UTF8,提供需解碼數(shù)據(jù)的編碼類型為UTF8。
[0180]步驟3.3:輸出關(guān)鍵數(shù)據(jù)的編碼類型為UTF8 ;
[0181]步驟4:根據(jù)所述數(shù)據(jù)編碼類型,按照瀏覽器的編碼格式或其他編碼格式需求進行轉(zhuǎn)碼。
[0182]本步驟中,假如識別到的編碼類型為UTF8,而瀏覽器的編碼格式為GB18030,則需要將UTF8格式的數(shù)據(jù)轉(zhuǎn)換為GB18030格式的數(shù)據(jù),即可顯示,否則將會亂碼。
[0183]本發(fā)明第二具體實施例所分析的網(wǎng)絡(luò)報文如下所示,本實施例中,以HTTP報文為例,但不限于HTTP報文;本實施例僅屬于本發(fā)明思想的一部分,并非全部內(nèi)容。
[0184]本實施例中,網(wǎng)絡(luò)報文如下所示:
[0185]POST/aj/mblog/add ? domain = 2869929424&ajwvr = 6&__rnd =1416799662398HTTP/1.1
[0186]Host:weib0.com
[0187]Connect1n:keep-alive
[0188]...........略
[0189]locat1n = v6_content_home&appkey = &style_type = l&pic_id = &text = %EA % 89 % 81 % ED % 84 % 87&pdetail = &rank = O&rankid = &module = stissue&pub_type = dialog&_t = 0
[0190]本實施例所述方法參照圖2所示流程,具體包括以下步驟:
[0191]步驟1:提取該報文中的關(guān)鍵字“text =”后的關(guān)鍵數(shù)據(jù);
[0192]本步驟中,所述關(guān)鍵數(shù)據(jù)為:% ea% 89% 81% ed% 84% 87 ;
[0193]步驟2:將提取出來的關(guān)鍵字:% EA% 89% 81% ED% 84% 87進行解碼;
[0194]本步驟中,解碼后的十六進制數(shù)為:EA 89 81 ED 8487 ;
[0195]步驟3:將解碼后的數(shù)據(jù)進行數(shù)據(jù)編碼類型識別;
[0196]本實施例中,步驟3包括以下子步驟:
[0197]步驟3.1:對所述解碼后的數(shù)據(jù)進行編碼字符統(tǒng)計;
[0198]本步驟中,根據(jù)預(yù)設(shè)的編碼區(qū)間、優(yōu)先級關(guān)系以及權(quán)重,從高優(yōu)先級至低優(yōu)先級對該數(shù)據(jù)進行遍歷統(tǒng)計,具體如下:
[0199]步驟3.1.1:判斷第一個字符(例:EA)是否滿足ASCII編碼區(qū)間,不滿足,則進行下一步;
[0200]本步驟中,如果第一個字符E8滿足ASCII編碼區(qū)間,則滿足ASCII編碼區(qū)間的字符數(shù)+1 ;偏移I位,返回步驟3.1.1,繼續(xù)遍歷統(tǒng)計后續(xù)數(shù)據(jù),直至可偏移的最大長度;
[0201]步驟3.1.2:判斷前兩個字符(例:EA 89)是否滿足UTF8與GB18030的重疊區(qū)間(包括可顯示區(qū)間和不可顯示區(qū)間),不滿足,則進行下一步;
[0202]本步驟中,如果前兩個字符滿足UTF8與GB18030的重疊區(qū)間,則滿足UTF8與GB18030的重疊區(qū)間的字符數(shù)+2 ;偏移2位,返回步驟3.1.1,繼續(xù)遍歷統(tǒng)計后續(xù)數(shù)據(jù),直至可偏移的最大長度;
[0203]步驟3.1.3:判斷前兩個字符(例:EA 89)是否滿足空洞編碼區(qū)間,不滿足,則進行下一步;
[0204]本步驟中,如果前兩個字符滿足空洞編碼區(qū)間,則滿足空洞編碼區(qū)間的字符數(shù)+2 ;偏移2位,返回步驟3.1.1,繼續(xù)遍歷統(tǒng)計后續(xù)數(shù)據(jù),直至可偏移的最大長度;
[0205]步驟3.1.4:判斷前四個字符(例:EA 89 81 ED)是否滿足GB18030的四字節(jié)編碼區(qū)間,不滿足,則進行下一步,如果滿足,則確定GB18030編碼為最終編碼類型;
[0206]步驟3.1.5:判斷前六個字符(例:EA 89 81 ED 84 87)是否同時滿足GB18030編碼和UTF8非常用6字節(jié)組合編碼區(qū)間,滿足,則同時滿足GB18030編碼和UTF8非常用6字節(jié)組合編碼區(qū)間的字符數(shù)+6,偏移6位,返回步驟3.1.1,繼續(xù)遍歷統(tǒng)計后續(xù)數(shù)據(jù);
[0207]本步驟中,如果前六個字符不同時滿足GB18030編碼和UTF8非常用6字節(jié)組合編碼區(qū)間,則當(dāng)前字符不滿足任何編碼區(qū)間,確定所述解碼后的數(shù)據(jù)對應(yīng)的編碼類型為GB18030 編碼。
[0208]循環(huán)執(zhí)行步驟3.1中的各步驟,直至解碼后的數(shù)據(jù)中的所有字符遍歷完畢,本實施例中所述解碼后的數(shù)據(jù)的統(tǒng)計結(jié)果為:滿足UTF8非常用6字節(jié)組合編碼區(qū)間的字符個數(shù)為6,滿足其他編碼區(qū)間的字符數(shù)均為O。
[0209]步驟3.2:根據(jù)統(tǒng)計結(jié)果進行編碼類型決策;
[0210]具體的,本發(fā)明實施例中所述解碼后的數(shù)據(jù)總長度M = 6,減去空字符和O字符的長度后為N = 6 ;
[0211]本發(fā)明實施例進行編碼類型決策的過程包括以下步驟:
[0212]步驟3.2.1:判斷N是否等于ASCII區(qū)間的字符長度0,判斷結(jié)果為不等于,進行下一步;
[0213]步驟3.2.2:判斷N是否等于UTF8編碼區(qū)間的字符長度O與ASCII編碼區(qū)間字符長度O之和0,判斷結(jié)果為不等于,進行下一步;
[0214]步驟3.2.3:判斷N是否等于GB18030編碼區(qū)間的字符長度O與ASCII編碼區(qū)間字符長度O之和0,判斷結(jié)果為不等于,進行下一步;
[0215]步驟3.2.4:判斷N是否等于UTF8編碼區(qū)間的字符長度O、ASCII編碼區(qū)間字符長度O及UTF8編碼與GB18030編碼重疊區(qū)間字符長度O之和0,判斷結(jié)果為不等于,進行下一步;
[0216]步驟3.2.5:判斷N是否等于同時滿足GB18030編碼和UTF8非常用6字節(jié)編碼組合區(qū)間的字符長度為6,判斷結(jié)果為等于,認為所述解碼后的數(shù)據(jù)對