一種數(shù)據(jù)編碼類(lèi)型識(shí)別及轉(zhuǎn)碼方法和裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及網(wǎng)絡(luò)安全技術(shù),尤其涉及一種統(tǒng)一定位符(URL)數(shù)據(jù)的數(shù)據(jù)編碼類(lèi)型識(shí)別及轉(zhuǎn)碼方法和裝置。
【背景技術(shù)】
[0002]隨著網(wǎng)絡(luò)技術(shù)的快速發(fā)展,越來(lái)越多的用戶(hù)使用手機(jī)、計(jì)算機(jī)及平板電腦等設(shè)備上網(wǎng),用戶(hù)一般情況下會(huì)通過(guò)瀏覽器(如IE瀏覽器、Firefo瀏覽器及Chrome瀏覽器等)瀏覽網(wǎng)頁(yè)或提交數(shù)據(jù),或者采用網(wǎng)絡(luò)應(yīng)用軟件(淘寶網(wǎng)軟件、京東網(wǎng)軟件以及當(dāng)當(dāng)網(wǎng)軟件)提交數(shù)據(jù)。在網(wǎng)絡(luò)安全和上網(wǎng)行為管理領(lǐng)域中,為了快速預(yù)防網(wǎng)絡(luò)犯罪行為,常常需要獲取并分析用戶(hù)通過(guò)瀏覽器和應(yīng)用軟件所產(chǎn)生的網(wǎng)絡(luò)數(shù)據(jù),而大部分網(wǎng)絡(luò)數(shù)據(jù)通常由UTF8和GB18030編碼后經(jīng)過(guò)URLENC0DE再次編碼,其中,GB18030編碼又包含GBK編碼和GB2312編碼;因此,在還原用戶(hù)數(shù)據(jù)時(shí),需要對(duì)網(wǎng)絡(luò)數(shù)據(jù)進(jìn)行URLDEC0DE解碼,而解碼后的用戶(hù)數(shù)據(jù)通常為UTF8或GB18030編碼不等,故此,如何有效和準(zhǔn)確的識(shí)別用戶(hù)數(shù)據(jù)的編碼類(lèi)型,將用戶(hù)數(shù)據(jù)展現(xiàn)出來(lái),是目前亟待解決的問(wèn)題。
[0003]現(xiàn)有的網(wǎng)絡(luò)數(shù)據(jù)編碼識(shí)別方案主要限于以下幾種:
[0004]I)在用戶(hù)提交表單或下載數(shù)據(jù)時(shí),數(shù)據(jù)報(bào)文中會(huì)帶有charset字樣,提取charset對(duì)應(yīng)的編碼類(lèi)型可以對(duì)數(shù)據(jù)報(bào)文進(jìn)行編解碼,如果未提取到charset字樣的編碼類(lèi)型,則會(huì)采用預(yù)先設(shè)定的編碼類(lèi)型對(duì)數(shù)據(jù)報(bào)文進(jìn)行編解碼。但是,針對(duì)沒(méi)有charset字樣的數(shù)據(jù)報(bào)文,在沒(méi)有預(yù)設(shè)的編碼類(lèi)型或者預(yù)設(shè)的編碼類(lèi)型錯(cuò)誤的情況下,會(huì)直接造成數(shù)據(jù)亂碼;并且,上述方法需要定期的更新和維護(hù)預(yù)設(shè)地編碼類(lèi)型,維護(hù)成本高,準(zhǔn)確率較低。
[0005]2)通過(guò)待編碼網(wǎng)頁(yè)的參考編碼數(shù)組以及本地預(yù)設(shè)的備選編碼數(shù)組,確定出包含在該參考編碼數(shù)組和該備選編碼數(shù)組中的一種編碼類(lèi)型作為待編碼網(wǎng)頁(yè)的編碼類(lèi)型;但這種獲取數(shù)據(jù)編碼類(lèi)型的方法對(duì)參考編碼數(shù)組和備選編碼數(shù)組的依賴(lài)性較大,如果數(shù)據(jù)報(bào)文不符合該參考編碼或備選編碼的編碼類(lèi)型,則會(huì)造成數(shù)據(jù)亂碼;且該方式依賴(lài)于瀏覽器,需要用戶(hù)去選擇“自動(dòng)檢測(cè)文字編碼”選項(xiàng),用戶(hù)感知較強(qiáng),無(wú)法達(dá)到無(wú)感知的自動(dòng)檢測(cè)文字編碼,且需要不斷的更新和維護(hù)參考編碼數(shù)組和備選編碼數(shù)組,成本較大。
[0006]3)通過(guò)將輸入需要解碼的URL字符串?dāng)?shù)按不同的編碼方式進(jìn)行解碼,得到不同的URL字符串,再對(duì)這些不同的URL字符串按其對(duì)應(yīng)的解碼方式進(jìn)行編碼,將編碼后不同的URL字符串與輸入需要解碼的編碼后的URL字符串對(duì)比,如果編碼后不同的URL字符串其中之一與輸入需要解碼的編碼后的URL字符串相同,則輸入需要解碼的編碼后的URL字符串的編碼類(lèi)型為前者的編碼類(lèi)型。但是,采用該編碼類(lèi)型識(shí)別方案,假如輸入需要解碼的URL字符串滿(mǎn)足UTF8編碼和GB18030編碼重疊編碼區(qū)間,或同時(shí)滿(mǎn)足多種編碼類(lèi)型的編碼范圍,按照此方案中將該URL數(shù)據(jù)按多種解碼方式解碼,再按多種編碼方式編碼,則會(huì)出現(xiàn)多對(duì)原始URL字符串與再次編碼后的數(shù)據(jù)一致的情況,當(dāng)出現(xiàn)此情況時(shí),將無(wú)法識(shí)別出正確的數(shù)據(jù)編碼類(lèi)型。
[0007]因此,目前的編碼類(lèi)型識(shí)別方案都存在明顯的缺陷:準(zhǔn)確率低,維護(hù)成本高,容易造成數(shù)據(jù)亂碼。
【發(fā)明內(nèi)容】
[0008]有鑒于此,本發(fā)明實(shí)施例期望提供一種數(shù)據(jù)編碼類(lèi)型識(shí)別及轉(zhuǎn)碼方法,能夠提高數(shù)據(jù)編碼識(shí)別的準(zhǔn)確率,減少亂碼,提高數(shù)據(jù)編碼類(lèi)型識(shí)別及轉(zhuǎn)碼效率,降低維護(hù)成本。
[0009]為達(dá)到上述目的,本發(fā)明的技術(shù)方案是這樣實(shí)現(xiàn)的:
[0010]本發(fā)明實(shí)施例提供了一種數(shù)據(jù)編碼類(lèi)型識(shí)別及轉(zhuǎn)碼方法,所述方法包括:
[0011]提取用戶(hù)操作產(chǎn)生的網(wǎng)絡(luò)報(bào)文中的關(guān)鍵數(shù)據(jù),對(duì)所述關(guān)鍵數(shù)據(jù)進(jìn)行解碼;
[0012]確定所述關(guān)鍵數(shù)據(jù)解碼后的數(shù)據(jù)對(duì)應(yīng)的編碼類(lèi)型;
[0013]根據(jù)所述編碼類(lèi)型,對(duì)所述關(guān)鍵數(shù)據(jù)解碼后的數(shù)據(jù)進(jìn)行轉(zhuǎn)碼。
[0014]上述方案中,所述提取用戶(hù)操作產(chǎn)生的網(wǎng)絡(luò)報(bào)文中的關(guān)鍵數(shù)據(jù)包括:根據(jù)關(guān)鍵字或正則表達(dá)式,提取所述網(wǎng)絡(luò)報(bào)文中的關(guān)鍵數(shù)據(jù)。
[0015]上述方案中,所述方法還包括:
[0016]將不同的編碼類(lèi)型劃分成多個(gè)編碼區(qū)間,并確定各編碼區(qū)間的優(yōu)先級(jí)關(guān)系。
[0017]上述方案中,所述確定所述關(guān)鍵數(shù)據(jù)解碼后的數(shù)據(jù)對(duì)應(yīng)的編碼類(lèi)型包括:
[0018]加載所述各編碼區(qū)間的配置信息;
[0019]循環(huán)遍歷所述解碼后的數(shù)據(jù),計(jì)算滿(mǎn)足各編碼區(qū)間的字符個(gè)數(shù);
[0020]根據(jù)所述解碼后的數(shù)據(jù)中滿(mǎn)足各編碼區(qū)間的字符個(gè)數(shù)、以及各編碼區(qū)間的優(yōu)先級(jí)關(guān)系進(jìn)行編碼類(lèi)型判斷,確定所述解碼后的數(shù)據(jù)所對(duì)應(yīng)的編碼類(lèi)型;
[0021 ] 釋放所述各編碼區(qū)間的配置信息。
[0022]上述方案中,所述循環(huán)遍歷所述解碼后的數(shù)據(jù),計(jì)算滿(mǎn)足各編碼區(qū)間的字符個(gè)數(shù)包括:
[0023]按照各編碼區(qū)間的第一預(yù)設(shè)優(yōu)先級(jí),依次判斷所述解碼后的數(shù)據(jù)中的字符是否滿(mǎn)足各編碼區(qū)間;統(tǒng)計(jì)所述解碼后的數(shù)據(jù)中滿(mǎn)足各編碼區(qū)間的字符數(shù)。
[0024]上述方案中,所述根據(jù)解碼后的數(shù)據(jù)中滿(mǎn)足各編碼區(qū)間的字符個(gè)數(shù)、以及各編碼區(qū)間的優(yōu)先級(jí)關(guān)系進(jìn)行編碼類(lèi)型判斷,確定所述解碼后的數(shù)據(jù)所對(duì)應(yīng)的編碼類(lèi)型包括:
[0025]按照各編碼區(qū)間的第二預(yù)設(shè)優(yōu)先級(jí),依次判斷解碼后的數(shù)據(jù)中滿(mǎn)足各編碼區(qū)間的字符數(shù)與所述解碼后的數(shù)據(jù)扣除空字符和O字符后的總長(zhǎng)度的之間關(guān)系,根據(jù)解碼后的數(shù)據(jù)中滿(mǎn)足各編碼區(qū)間的字符數(shù)與所述解碼后的數(shù)據(jù)扣除空字符和O字符后的總長(zhǎng)度之間的關(guān)系確定所述關(guān)鍵數(shù)據(jù)所對(duì)應(yīng)的編碼類(lèi)型。
[0026]本發(fā)明實(shí)施例還提供了一種數(shù)據(jù)編碼類(lèi)型識(shí)別及轉(zhuǎn)碼裝置,所述裝置包括:關(guān)鍵數(shù)據(jù)提取單元、解碼單元、編碼類(lèi)型識(shí)別單元、數(shù)據(jù)轉(zhuǎn)碼單元,其中,
[0027]所述關(guān)鍵數(shù)據(jù)提取單元,用于提取用戶(hù)操作產(chǎn)生的網(wǎng)絡(luò)報(bào)文中的關(guān)鍵數(shù)據(jù),并將提取的關(guān)鍵數(shù)據(jù)發(fā)送到解碼單元;
[0028]所述解碼單元,用于對(duì)所述關(guān)鍵數(shù)據(jù)進(jìn)行解碼,并解碼后的數(shù)據(jù)發(fā)送到編碼類(lèi)型識(shí)別單元;
[0029]所述編碼類(lèi)型識(shí)別單元,用于確定所述關(guān)鍵數(shù)據(jù)解碼后的數(shù)據(jù)對(duì)應(yīng)的編碼類(lèi)型,并將確定的編碼類(lèi)型發(fā)送到數(shù)據(jù)轉(zhuǎn)碼單元;
[0030]所述數(shù)據(jù)轉(zhuǎn)碼單元,用于根據(jù)所述編碼類(lèi)型,對(duì)所述關(guān)鍵數(shù)據(jù)解碼后的數(shù)據(jù)進(jìn)行轉(zhuǎn)碼。
[0031]上述方案中,所述關(guān)鍵數(shù)據(jù)提取單元具體用于:根據(jù)關(guān)鍵字或正則表達(dá)式,提取所述網(wǎng)絡(luò)報(bào)文中的關(guān)鍵數(shù)據(jù)。
[0032]上述方案中,所述裝置還包括編碼區(qū)間劃分單元,用于將不同的編碼類(lèi)型劃分成多個(gè)編碼區(qū)間,并確定各編碼區(qū)間的優(yōu)先級(jí)關(guān)系。
[0033]上述方案中,所述編碼類(lèi)型識(shí)別單元包括配置子單元、統(tǒng)計(jì)子單元、決策子單元、撤銷(xiāo)子單元,其中,
[0034]所述配置子單元,用于加載所述各編碼區(qū)間的配置信息;
[0035]所述統(tǒng)計(jì)子單元,用于循環(huán)遍歷所述解碼后的數(shù)據(jù),計(jì)算滿(mǎn)足各編碼區(qū)間的字符個(gè)數(shù);
[0036]所述決策子單元,用于根據(jù)所述解碼后的數(shù)據(jù)中滿(mǎn)足各編碼區(qū)間的字符個(gè)數(shù)、以及各編碼區(qū)間的優(yōu)先級(jí)關(guān)系進(jìn)行編碼類(lèi)型判斷,確定所述解碼后的數(shù)據(jù)所對(duì)應(yīng)的編碼類(lèi)型;
[0037]所述撤銷(xiāo)子單元,用于釋放所述各編碼區(qū)間的配置信息。
[0038]上述方案中,所述統(tǒng)計(jì)子單元具體用于:按照各編碼區(qū)間的第一預(yù)設(shè)優(yōu)先級(jí),依次判斷所述解碼后的數(shù)據(jù)中的字符是否滿(mǎn)足各編碼區(qū)間;統(tǒng)計(jì)所述解碼后的數(shù)據(jù)中滿(mǎn)足各編碼區(qū)間的字符數(shù)。
[0039]上述方案中,所述決策子單元具體用于:按照各編碼區(qū)間的第二預(yù)設(shè)優(yōu)先級(jí),依次判斷解碼后的數(shù)據(jù)中滿(mǎn)足各編碼區(qū)間的字符數(shù)與所述解碼后的數(shù)據(jù)扣除空字符和O字符后的總長(zhǎng)度的之間關(guān)系,根據(jù)解碼后的數(shù)據(jù)中滿(mǎn)足各編碼區(qū)間的字符數(shù)與所述解碼后的數(shù)據(jù)扣除空字符和O字符后的總長(zhǎng)度之間的關(guān)系確定所述關(guān)鍵數(shù)據(jù)所對(duì)應(yīng)的編碼類(lèi)型。
[0040]本發(fā)明實(shí)施例所提供的方法及裝置,先提取用戶(hù)操作產(chǎn)生的網(wǎng)絡(luò)報(bào)文中的關(guān)鍵數(shù)據(jù),對(duì)所述關(guān)鍵數(shù)據(jù)進(jìn)行解碼;再確定所述關(guān)鍵數(shù)據(jù)解碼后的數(shù)據(jù)對(duì)應(yīng)的編碼類(lèi)型;最后根據(jù)所述編碼類(lèi)型,對(duì)所述關(guān)鍵數(shù)據(jù)解碼后的數(shù)據(jù)進(jìn)行轉(zhuǎn)碼。如此,能夠有效、準(zhǔn)確地識(shí)別和轉(zhuǎn)換數(shù)據(jù),從而解決由于編碼類(lèi)型識(shí)別錯(cuò)誤導(dǎo)致的中文亂碼問(wèn)題,提高了數(shù)據(jù)編碼識(shí)別的準(zhǔn)確率;并且,數(shù)據(jù)編碼類(lèi)型識(shí)別和解碼過(guò)程無(wú)須人工分析和維護(hù),降低了維護(hù)成本,提高了用戶(hù)體驗(yàn)。
【附圖說(shuō)明】
[0041]圖1為本發(fā)明實(shí)施例一數(shù)據(jù)編碼類(lèi)型識(shí)別及轉(zhuǎn)碼方法流程示意圖;
[0042]圖2為本發(fā)明實(shí)施例二數(shù)據(jù)編碼類(lèi)型識(shí)別及轉(zhuǎn)碼方法流程示意圖;
[0043]圖3為本發(fā)明實(shí)施例數(shù)據(jù)編碼類(lèi)型識(shí)別及轉(zhuǎn)碼裝置結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0044]現(xiàn)有技術(shù)中大都是通過(guò)提取超文本傳輸協(xié)議(HTTP,HyperText TransferProtocol)報(bào)文中request header中的charset來(lái)獲得關(guān)鍵數(shù)據(jù)的編碼類(lèi)型,或通過(guò)提取HTTP報(bào)文中response header中的charset來(lái)獲得關(guān)鍵數(shù)據(jù)的編碼類(lèi)型,但是,如果HTTP 報(bào)文中 request header 中沒(méi)有 charset,或者 HTTP 報(bào)文中 response header 中沒(méi)有charset,或者HTTP數(shù)據(jù)報(bào)文中沒(méi)有相關(guān)的數(shù)據(jù)編碼類(lèi)型,或者數(shù)據(jù)HTTP數(shù)據(jù)報(bào)文中的數(shù)據(jù)編碼類(lèi)型是錯(cuò)誤的,這種方法則會(huì)造成數(shù)據(jù)亂碼。如果通過(guò)預(yù)定義的方式來(lái)指定關(guān)鍵數(shù)據(jù)的編碼類(lèi)型,那么,一旦該預(yù)定義的編碼類(lèi)型錯(cuò)誤或者HTTP報(bào)文的編碼類(lèi)型發(fā)生變化,則也會(huì)造成數(shù)據(jù)亂碼,而且需要工作人員去維護(hù)該預(yù)定義的編碼類(lèi)型,需要花費(fèi)大量時(shí)間去分析和維護(hù)。
[0045]本發(fā)明實(shí)施例所述編碼類(lèi)型識(shí)別及轉(zhuǎn)碼方法,通過(guò)分析常用編碼之間的關(guān)系,結(jié)合各種編碼的特點(diǎn),總結(jié)編碼之間的規(guī)律,實(shí)現(xiàn)了一種URL編碼類(lèi)型識(shí)別和轉(zhuǎn)碼的方法,可以有效和準(zhǔn)確的識(shí)別和轉(zhuǎn)換數(shù)據(jù),可擴(kuò)展性較強(qiáng),無(wú)須人工分析和維護(hù),降低了維護(hù)成本,給用戶(hù)帶來(lái)了良好的體驗(yàn)。
[0046]本發(fā)明實(shí)施例中,先提取用戶(hù)操作產(chǎn)生的網(wǎng)絡(luò)報(bào)文中的關(guān)鍵數(shù)據(jù),對(duì)所述關(guān)鍵數(shù)據(jù)進(jìn)行解碼;再確定所述關(guān)鍵數(shù)據(jù)解碼后的數(shù)據(jù)對(duì)應(yīng)的編碼類(lèi)型;最后根據(jù)所述編碼類(lèi)型,對(duì)所述關(guān)鍵數(shù)據(jù)解碼后的數(shù)據(jù)進(jìn)行轉(zhuǎn)碼。
[0047]本發(fā)明實(shí)施例所述編碼類(lèi)型識(shí)別及轉(zhuǎn)碼方法,在確定所述關(guān)鍵數(shù)據(jù)解碼后的數(shù)據(jù)對(duì)應(yīng)的編碼類(lèi)型之前,首先需要將不同的編碼類(lèi)型劃分成多個(gè)編碼區(qū)間,并確定各編碼區(qū)間的優(yōu)先級(jí)關(guān)系。所述編碼區(qū)間的優(yōu)先級(jí)關(guān)系包括第一優(yōu)先級(jí)和第二優(yōu)先級(jí),其中,所述第一優(yōu)先級(jí)用于循環(huán)遍歷所述解碼后的數(shù)據(jù),計(jì)算滿(mǎn)足各編碼區(qū)間的字符個(gè)數(shù);所述第二優(yōu)先級(jí)用于根據(jù)所述解碼后的數(shù)據(jù)中滿(mǎn)足各編碼區(qū)間的字符個(gè)數(shù)進(jìn)行編碼類(lèi)型判斷,確定所述解碼后的數(shù)據(jù)所對(duì)應(yīng)的編碼類(lèi)型;所述優(yōu)先級(jí)可以根據(jù)不同編碼之間的關(guān)系、編碼區(qū)間內(nèi)碼字的使用情況、編碼的特點(diǎn)、碼字的生僻程度確定。
[0048]本發(fā)明實(shí)施例中,以UTF8編碼和GB18030編碼為例,具體闡述本發(fā)明實(shí)施例